poj 3982 序列

序列
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 5036   Accepted: 2217

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>  
#include <string.h>
#define MAXHANG 110
#define MAXLIE 100
void main(){
int fibo[MAXHANG][MAXLIE] = {0};
char a[3][10]={0};
int i,j,nLen,k,flag = 0;
while (scanf("%s",a[0]) != EOF)
{
scanf("%s%s",a[1],a[2]);
for(k=0;k<3;k++){
nLen = strlen(a[k]);
j = 0;
for(i = nLen -1;i >= 0;i--)
fibo[k][j++] = a[k][i] - '0';
}
for (j = 0; j< MAXHANG-3;j++)
{
for (i = 0;i < MAXLIE-1; i ++)
{
fibo[3+j][i] += fibo[0+j][i] + fibo[1+j][i] + fibo[2+j][i];
if(fibo[3+j][i] >= 20){
fibo[3+j][i] -= 20;
fibo[3+j][i+1]++;
fibo[3+j][i+1]++;
}
else if (fibo[3+j][i] >= 10)
{
fibo[3+j][i] -= 10;
fibo[3+j][i+1]++;
}
}
}
for (j = MAXLIE - 1;j >= 0;j-- )
{
if (flag)
{
printf("%d",fibo[99][j]);
}

else if(fibo[99][j]) {
printf("%d",fibo[99][j]);
flag = 1;
}
}
printf("\n");
for (i = 0; i< MAXHANG; i++)
for (j = 0;j < MAXLIE; j++)
fibo[i][j] = 0;
for (i = 0; i< 3;i++)
for (j = 0;j < 10; j++)
a[i][j]=0;
flag = 0;
}
}

posted @ 2011-11-23 11:22  w0w0  阅读(163)  评论(0编辑  收藏  举报