蓝桥杯练习系统 基础练习 全部习题ac代码
看在作者这么肝的份上点个赞吧👀
目录
- 蓝桥杯练习系统 基础练习 全部习题ac代码
-
- BASIC-1 闰年判断
- BASIC-2 01字串
- BASIC-4 数列特征
- BASIC-5 查找整数
- BASIC-6 杨辉三角形
- BASIC-7 特殊的数字
- BASIC-8 回文数
- BASIC-9 特殊回文数
- BASIC-10 十进制转十六进制
- BASIC-11 十六进制转十进制
- BASIC-12 十六进制转八进制
- BASIC-13 数列排序
- BASIC-14 VIP试题 时间转换
- BASIC-15 VIP试题 字符串对比
- BASIC-16 VIP试题 分解质因数
- BASIC-17 VIP试题 矩阵乘法
- BASIC-18 VIP试题 矩形面积交
- BASIC-19 VIP试题 完美的代价
- BASIC-20 VIP试题 数的读法
- BASIC-21 VIP试题 Sine之舞
- BASIC-22 VIP试题 FJ的字符串
- BASIC-23 VIP试题 芯片测试
- BASIC-24 VIP试题 龟兔赛跑预测
- BASIC-25 VIP试题 回形取数
- BASIC-26 VIP试题 报时助手
- BASIC-27 VIP试题 2n皇后问题
- BASIC-28 VIP试题 Huffuman树
- BASIC-29 VIP试题 高精度加法
- BASIC-30 VIP试题 阶乘计算
- to be continued...
BASIC-1 闰年判断
问题描述
给定一个年份,判断这一年是不是闰年。
当以下情况之一满足时,这一年是闰年:
-
年份是4的倍数而不是100的倍数;
-
年份是400的倍数。
其他的年份都不是闰年。
输入格式
输入包含一个整数y,表示当前的年份。
输出格式
输出一行,如果给定的年份是闰年,则输出yes,否则输出no。
说明:当试题指定你输出一个字符串作为结果(比如本题的yes或者no,你需要严格按照试题中给定的大小写,写错大小写将不得分。
样例输入
2013
样例输出
no
样例输入
2016
样例输出
yes
数据规模与约定
1990 <= y <= 2050。
注意闰年的判断条件
#include "iostream"
#include "stdio.h"
#include "stdlib.h"
using namespace std;
int main()
{
bool a;
a = false;
int n;
cin >> n;
if (n % 4==0)
{
if (n % 400 != 0)
a = true;
}
if (n % 400 == 0)
a = true;
if (a)
cout << "yes" << endl;
else
cout << "no" << endl;
return 0;
}
BASIC-2 01字串
问题描述
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
请按从小到大的顺序输出这32种01串。
输入格式
本试题没有输入。
输出格式
输出32行,按从小到大的顺序每行一个长度为5的01串。
样例输出
00000
00001
00010
00011
<以下部分省略>
把十进制的数从0开始转化为二进制输出即可,注意补足前导0;
#include <iostream>
using namespace std;
int main()
{
for(int i=0; i<32; ++i)
{
int a[5] ={
0};
int temp = i;
int index = 4;
while (temp >= 1)
{
a[index--] = temp % 2;
temp = temp/2;
}
for (int idx = 0; idx < 5; ++idx)
{
cout << a[idx];
}
cout << endl;
}
return 0;
}
BASIC-4 数列特征
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
一些对数组的处理
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,sum=0,MIN = 10000,MAX = -10000;
int s[10000];
cin >> n;
while(n--)
{
cin >> s[n];
sum += s[n];
MIN = min(MIN,s[n]);
MAX = max(MAX,s[n]);
}
cout << MAX << endl;
cout << MIN << endl;
cout << sum << endl;
return 0;
}
BASIC-5 查找整数
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
遍历查找即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,t,a;
cin >> n;
t=n;
int str[n+1];
while(t--)
cin >> str[n-t];
cin >> a;
for(int i=0;i<=n;i++)
{
if(str[i]==a)
{
cout << i << endl;
t=-99;
break;
}
}
if(t!=-99)
cout << -1 << endl;
return 0;
}
BASIC-6 杨辉三角形
问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
输入格式
输入包含一个数n。
输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。
样例输入
4
样例输出
1
1 1
1 2 1
1 3 3 1
数据规模与约定
1 <= n <= 34。
用一个数组来储存杨辉三角,注意是哪两个数相加即可。
#include<cstdio>
int main()
{
int a[100][100],i,j,num;
scanf("%d",&num);
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
a[i][j]=0;
}
for(i=0;i<num;i++)
a[i][0]=1;
for(i=1;i<num;i++)
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<num;i++)
{
for(j=0;j<=i;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
BASIC-7 特殊的数字
问题描述
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。
输出格式
按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。
遍历+判断
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=100;i<1000;i++)
{
if((i%10)*(i%10)*(i%10)+((i/10)%10)*((i/10)%10)*((i/10)%10)+((i/100)%10)*((i/100)%10)*((i/100)%10)==i)
cout << i << endl;
}
return 0;
}
BASIC-8 回文数
问题描述
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
输出格式
按从小到大的顺序输出满足条件的四位十进制数。
只要把12正序和倒叙21各输出一次即可
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=10;i<100;i++)
cout << i << i%10 << (i/10)%10 << endl;
return 0;
}
BASIC-9 特殊回文数
问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<=n<=54。
暴力算法
#include<iostream>
#include<algorithm>
using namespace std;
int ans[1000005];
int main()
{
int n,now,t=0;
cin>>n;
if(n%2==0)//只有偶数才有6位十进制数的可能
{
now=n/2;
for(int i=9;i>=1;i--)//第一位不能为0
{
if(now-i>=0)
{
for(int j=9;j>=0;j--)
{
if(now-i-j>=0)
{
for(int k=9;k>=0;k--)
{
if(i+j+k==now)
{
ans[t++]=i*100000+j*10000+k*1000+k*100+j*10+i;
}
}
}
}
}
}
}
//五位数的情况
int l;
if(n%2==0)
{
l=8;
}
else
l=9;
for(int i=l;i>=0;i=i-2)//先考虑最中间位数的情况,如果n是偶数,则最中间的一定是偶数,如果n是奇数,则中间位为奇数
{
if(n-i>=0)
{
now=(n-i)/2;
for(int j=9;j>=1;j--)//首位不为0
{
if(now-j>=0)
{
for(int k=9;k>=0;k--)
{
if(j+k==now)
ans[t++]=j*10000+k*1000+i*100+k*10+j;
}
}
}
}
}
sort(ans,ans+t);
for(int i=0;i<t;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}
BASIC-10 十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示
样例输入
30
样例输出
1E
与十进制转二进制类似,模上16再判断。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int a;
cin >> a;
char b[16] = {
'0','1','2','3','4','5','6','7','8',