北大ACM 3982 序列

来源:互联网 发布:php商城源码 编辑:程序博客网 时间:2024/05/16 08:02
序列
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6614 Accepted: 2951

Description

数列A满足An = An-1 + An-2 + An-3, n >= 3 

编写程序,给定A0, A1 和 A2, 计算A99

Input

输入包含多行数据 

每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 32767) 
数据以EOF结束

Output

对于输入的每一行输出A99的值

Sample Input

1 1 1

Sample Output

69087442470169316923566147
#include <stdio.h>int a[1000]={0}, b[1000]={0}, c[1000]={0};void GetSum(int d, int e, int f){int i = 0, jinwei = 0, x, digit = 0, j, k,temp;int *sum;int *left;int *right;while(d){a[i] = d % 10;d /= 10;i++;}digit = i;i = 0;while(e){b[i] = e % 10;e /= 10;i++;}if(i>digit){digit = i;}i = 0;while(f){c[i] = f % 10;f /= 10;digit++;i++;}if(i>digit){digit = i;}sum = a;left = b; right = c;for(i = 3; i < 100; i++){for(j = 0; j < digit || jinwei >0; j++){x = left[j]+right[j]+sum[j]+jinwei;jinwei = x/10;sum[j] = x%10;}digit = j;if(i==99) break;if(sum==c){sum=a;left=b;right=c;}else if(sum==a){sum=b;left=c;right=a;}else if(sum==b){sum=c;left=a;right=b;}}for(k = j-1; k >=0; k--)printf("%d",sum[k]);printf("\n");}int main(){int d,e,f;while(scanf("%d %d %d", &d, &e, &f) != EOF){if(d==0 && e==0 && f==0) printf("0\n");else GetSum(d,e,f);memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));}system("pause");return 0;}


测试数据:0 0 001 1 1690874424701693169235661472 2 21381748849403386338471322943 3 32072623274105079507706984414 4 42763497698806772676942645885 6 74277540629873614512954878109 9 9621786982231523852312095323111 111 1117668706114188794178515842317234 455 566311693558807635667584539061030 1 0243326752196814314517882410 0 1289920877084167176129344171 1 040095354761752599310631730

感谢在讨论区分享出数据的雷锋!
原创粉丝点击