新手推荐,蓝桥杯在线测试的题目。不定时不断更新中,没按顺序做。无聊的时候来切几题。
http://lx.lanqiao.org/index.page
已转到http://blog.csdn.net/murmured/article/details/19292147进行更新,因为保存很慢。
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
#include<cstdio>
const int mod=10007;
const int MAXN=1000000+10;
int ans[MAXN];
int main()
{
ans[1]=ans[2]=1;
int n;
scanf("%d",&n);
for(int i=3;i<=n;i++)
ans[i]=(ans[i-1]+ans[i-2])%mod;
printf("%d\n",ans[n]);
return 0;
}
给定圆的半径r,求圆的面积。
#include<cstdio>
#include<cmath>
const double pi=acos(-1.0);
int main()
{
double r;
scanf("%lf",&r);
printf("%.7lf\n",pi*r*r);
return 0;
}
求1+2+3+...+n的值。
#include<cstdio>
int main()
{
__int64 n;
scanf("%I64d",&n);
__int64 ans=(1+n)*n >>1;
printf("%I64d\n",ans);
return 0;
}
算a+b
#include <cstdio>
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a+b);
return 0;
}
#include <cstdio>
#include<algorithm>
using namespace std;
const int MAXN=200+10;
int a[MAXN];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d",a[0]);
for(int i=1;i<n;i++)
printf(" %d",a[i]);
printf("\n");
return 0;
}
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
#include <cstdio>
const int MAXN=10000+10;
int x[MAXN];
int main()
{
int n,a;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&x[i]);
scanf("%d",&a);
int ans=-1;
for(int i=1;i<=n;i++)
if(x[i]==a)
{
ans=i;
break;
}
printf("%d\n",ans);
return 0;
}
闰年判断
#include <cstdio>
int main()
{
int n;
scanf("%d",&n);
if(n %4==0 && n%100!=0 || n%400==0)
printf("yes\n");
else
printf("no\n");
return 0;
}
给定n个十六进制正整数,输出它们对应的八进制数。
思路:先将十六进制转为4位2进制,然后八进制可以从2进制的每3位得到。
#include<cstdio>
#include<cstring>
const int MAXN=100000;
char s[MAXN];
char two[MAXN*4];
int eight[MAXN*4];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
int n=strlen(s),len=0;
for(int i=0;i<n;i++)
{
switch(s[i])
{
case '0':sprintf(two+len,"%s","0000");break;
case '1':sprintf(two+len,"%s","0001");break;
case '2':sprintf(two+len,"%s","0010");break;
case '3':sprintf(two+len,"%s","0011");break;
case '4':sprintf(two+len,"%s","0100");break;
case '5':sprintf(two+len,"%s","0101");break;
case '6':sprintf(two+len,"%s","0110");break;
case '7':sprintf(two+len,"%s","0111");break;
case '8':sprintf(two+len,"%s","1000");break;
case '9':sprintf(two+len,"%s","1001");break;
case 'A':sprintf(two+len,"%s","1010");break;
case 'B':sprintf(two+len,"%s","1011");break;
case 'C':sprintf(two+len,"%s","1100");break;
case 'D':sprintf(two+len,"%s","1101");break;
case 'E':sprintf(two+len,"%s","1110");break;
case 'F':sprintf(two+len,"%s","1111");break;
}
len+=4;
}
// for(int i=0;i<len;i+=4)
// printf("%c%c%c%c ",two[i],two[i+1],two[i+2],two[i+3]);
int i=len-1,len2=0;
for(i=len-1;i>=2;i-=3)
{
eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2+(two[i-2]-'0')*4;
}
if(i==2)
eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2+(two[i-2]-'0')*4;
else if(i==1)
eight[len2++]= two[i]-'0'+(two[i-1]-'0')*2;
else if(i==0)
eight[len2++]= two[i]-'0';
i=len2-1;
while(eight[i]==0)
i--;
for(;i>=0;i--)
printf("%d",eight[i]);
printf("\n");
}
return 0;
}
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
思路:按权展开,注意范围 8个F的时候int越界。
#include<cstdio>
#include<cstring>
const int MAXN=10;
char s[MAXN];
int main()
{
while(~scanf("%s",s))
{
int n=strlen(s);
__int64 ans=0,p=16;
for(int i=0;i<n;i++)
{
if(s[i]>='0' && s[i]<='9')
ans=ans*p+(s[i]-'0');
else
ans=ans*p+(s[i]-'A'+10);
}
printf("%I64d\n",ans);
}
return 0;
}
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
#include<cstdio>
#include<cstring>
char s[10];
int main()
{
int n;
scanf("%d",&n);
for(int i=10000;i<1000000;i++)
{
sprintf(s,"%d",i);
int len=strlen(s);
bool ok=true;
for(int k=0;k<3;k++)
if(s[k]!=s[len-k-1])
ok=false;
if(ok)
{
int sum=0;
for(int k=0;k<len;k++)
sum+=s[k]-'0';
if(sum==n)
printf("%s\n",s);
}
}
return 0;
}
1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
#include<cstdio>
#include<cstring>
char s[10];
int main()
{
for(int i=1000;i<10000;i++)
{
sprintf(s,"%d",i);
int len=strlen(s);
bool ok=true;
for(int k=0;k<3;k++)
if(s[k]!=s[len-k-1])
ok=false;
if(ok)
{
printf("%s\n",s);
}
}
return 0;
}
153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3*3。编程求所有满足这种条件的三位十进制数
#include<cstdio>
#include<cstring>
char s[10];
int main()
{
for(int i=100;i<1000;i++)
{
sprintf(s,"%d",i);
int sum=0;
for(int k=0;k<3;k++)
{
int x=s[k]-'0';
sum+=x*x*x;
}
if(sum==i)
printf("%d\n",i);
}
return 0;
}
给出n个数,找出这n个数的最大值,最小值,和。
PS:题目的样例错了。和为11
#include<cstdio>
const int INF=10000+10;
int main()
{
int n,min=INF,max=-INF,sum=0,temp;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
sum+=temp;
if(max <temp)
max=temp;
if(min >temp)
min=temp;
}
printf("%d\n%d\n%d\n",max,min,sum);
return 0;
}
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有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。
给出一个非负整数,将它表示成十六进制的形式。
#include<cstdio>
int ans[30]={0};
int main()
{
int a;
scanf("%d",&a);
int len=0;
while(a)
{
ans[len++]=a % 16;
a/=16;
}
while(ans[len]==0 && len>=0)
len--;
if(len>=0)
for(int i=len;i>=0;i--)
{
if(ans[i] > 9)
printf("%c",ans[i]-10+'A');
else
printf("%d",ans[i]);
}
else
printf("0");
printf("\n");
return 0;
}
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。
它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。
下面给出了杨辉三角形的前4行:
1
1 1
1 2 1
1 3 3 1
给出n,输出它的前n行。
#include<cstdio>
int ans[36][36]={0};
int main()
{
ans[1][1]=1;
for(int i=2;i<=34;i++)
{
for(int j=1;j<=i;j++)
{
ans[i][j]=ans[i-1][j]+ans[i-1][j-1];
}
}
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
printf("%d",ans[i][1]);
for(int j=2;j<=i;j++)
{
printf(" %d",ans[i][j]);
}
printf("\n");
}
return 0;
}
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
#include<cstdio>
char ans[30][30];
int main()
{
for(int i=1;i<=26;i++)
ans[i][1]=ans[1][i]=i+'A'-1;
for(int i=1;i<=26;i++)
{
for(int j=1;j<=26;j++)
ans[i+1][j+1]=ans[i][j];
}
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
printf("%c",ans[i][j]);
}
printf("\n");
}
return 0;
}
对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:
00000
00001
00010
00011
00100
#include<cstdio>
int main()
{
for(int a=0;a<2;a++)
for(int b=0;b<2;b++)
for(int c=0;c<2;c++)
for(int d=0;d<2;d++)
for(int e=0;e<2;e++)
printf("%d%d%d%d%d\n",a,b,c,d,e);
return 0;
}