某种序列
时间限制:
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<cstdio>
- #include<iostream>
- #include<algorithm>
- #include<string.h>
- #include<string>
- #include<utility>
- #define MAX 10
- #define SUM_MAX 105
- #define PUTMAX 50
- using namespace std;
- int sum[SUM_MAX][SUM_MAX];
- pair<int,int> ss(int x, int y,int z,int scale)
- {
- pair<int, int> p;
- p.second = (x + y + z + scale) / MAX;
- p.first = (x + y + z + scale) % MAX;
- return p;
- }
- void divide(int d[], int num)
- {
- int i = 0;
- while (num != 0)
- {
- d[i] = num % 10;
- num = num / 10;
- i++;
- }
- return ;
- }
- void add()
- {
- int n = 0;
- for (int i = 3;i <= 99;i++)
- {
- int e = 0;
- while(e<= PUTMAX)
- {
- pair<int, int> temp = ss(sum[i - 3][e], sum[i - 2][e], sum[i - 1][e], sum[i][e]);
- sum[i][e] = temp.first;
- sum[i][e + 1] = temp.second;
- e++;
- }
- }
- return ;
- }
- int main()
- {
- //freopen("data.in", "r", stdin);
- int a, b, c;
- while(scanf("%d%d%d",&a,&b,&c)!=EOF)
- {
- memset(sum, 0, sizeof(sum));
- divide(sum[0], a);
- divide(sum[1], b);
- divide(sum[2], c);
- add();
- int n = 0;
- for (int i = 0;i<= PUTMAX;i++)
- {
- if(sum[99][PUTMAX - i]!=0){n = 1;}//定义的比较大所以前面的0就不输出
- if (n){printf("%d",sum[99][PUTMAX - i]);}
- }
- if (!n) { printf("0"); }
- printf("\n");
- }
- return 0;
- }