您的位置:首页 > 其它

蓝桥杯在线测试的题解

2014-02-04 15:27 441 查看
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

[cpp] view
plaincopy





#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
);

return 0;

}

给定圆的半径r,求圆的面积。

[cpp] view
plaincopy





#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的值。

[cpp] view
plaincopy





#include<cstdio>

int main()

{

__int64 n;

scanf("%I64d",&n);

__int64 ans=(1+n)*n >>1;

printf("%I64d\n",ans);

return 0;

}

算a+b

[cpp] view
plaincopy





#include <cstdio>

int main()

{

int a, b;

scanf("%d%d", &a, &b);

printf("%d", a+b);

return 0;

}

排序

[cpp] view
plaincopy





#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在数列中的第一次出现是第几个。

[cpp] view
plaincopy





#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;

}

闰年判断

[cpp] view
plaincopy





#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位得到。

[cpp] view
plaincopy





#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越界。

[cpp] view
plaincopy





#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 。

[cpp] view
plaincopy





#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是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。

[cpp] view
plaincopy





#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。编程求所有满足这种条件的三位十进制数

[cpp] view
plaincopy





#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

[cpp] view
plaincopy





#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: