nyoj 某种序列 114 (大数&&滚动数组) 好题
2015-11-10 20:54
239 查看
某种序列
时间限制:3000 ms | 内存限制:65535 KB难度:4
描述 数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99
输入输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束输出对于输入的每一行输出A99的值样例输入
1 1 1
样例输出
69087442470169316923566147
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 110 int a ; int b ; int c ; int sum ; void init(int x,int a[]) { int i=0; while(x) { a[i++]=x%10; x/=10; } } int main() { int aa,bb,cc; while(scanf("%d%d%d",&aa,&bb,&cc)!=EOF) { int i,j,t; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); init(aa,a); init(bb,b); init(cc,c); for(i=3;i<=99;i++) { memset(sum,0,sizeof(sum)); for(j=0;j<N;j++) { sum[j]+=(a[j]+b[j]+c[j]); if(sum[j]>9) { t=sum[j]; sum[j]=t%10; sum[j+1]=t/10; } } for(j=0;j<N;j++)//分别更新三个数的值(全都加 1,如 1,2,3变成2,3,4) { a[j]=b[j]; b[j]=c[j]; c[j]=sum[j]; } } for(j=N-1;j>0&&sum[j]==0;j--);//去掉前面的0。 for(;j>=0;j--) printf("%d",sum[j]); printf("\n"); } return 0; }
相关文章推荐
- 从零学Android(六)、App中的资源
- 团队项目中出现的问题
- ReactiveCocoa框架菜鸟入门(四)——信号(Signal)详解
- 自定义异常计算面积的小程序
- DES、RSA MD5 sha1四种加密算法的优缺点
- 我的第一篇文章
- latex编译后不生成*.aux文件
- Python windows7 install gevent
- ReactiveCocoa框架菜鸟入门(五)——信号的FlattenMap与Map
- unity不同平台下的路径及读写权限
- 天声人語 20151110 7人制ラグビーの快挙
- shell批处理中利用vi设置文件的fileformat
- hashCode
- snap相关(个人总结)
- LeetCode Basic Calculator II 计算器&栈
- 《信息传奇》第四集
- Android兼容性问题 -- FrameLayout中View设置margin无效
- 一些基础API文档中文翻译
- ReactiveCocoa入门教程——第二部分
- Linux shell 数组使用