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