某种序列
http://acm.nyist.net/JudgeOnline/problem.php?pid=114
时间限制:3000?ms ?|? 内存限制:65535?KB
难度:4
输入
输入包含多行数据?
每行数据包含3个整数A0,A1,A2 (0 <= A0,A2 <= 100000000)?
数据以EOF结束
输出
对于输入的每一行输出A99的值
样例输入
1 1 1
样例输出
69087442470169316923566147
描述
数列A满足An = An-1 + An-2 + An-3,n >= 3?
编写程序,给定A0,A1 和 A2,计算A99
?
我的代码,使用二维数组,方便保存和计算
#include <stdio.h>
#define MAX 100
int a[MAX][MAX];
int main(int argc,char *argv[])
{
int x,y,z,i,j;
while( scanf("%d %d %d",&x,&y,&z) != EOF){
//特殊情况一定要考虑 ::>_<::
if(!x && !y && !z){
printf("0\n");
continue;
}
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
a[i][j]=0;
j=0;
while(x){a[0][j++]=x%10; x /= 10;}
j=0;
while(y){a[1][j++]=y%10; y /= 10;}
j=0;
while(z){a[2][j++]=z%10; z /= 10;}
//求出a[99]
int digit=0,t;
for(i=3;i<MAX;i++){
digit=0;
for(j=0;j<MAX;j++){
t=a[i-1][j]+a[i-2][j]+a[i-3][j]+digit;
a[i][j] = t % 10;
digit = t / 10;
}
}
i=MAX-1;
while(!a[MAX-1][i]) i--;
for(;i>=0;i--)
printf("%d",a[MAX-1][i]);
printf("\n");
}
return 0;
}
?
题目推荐
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
void add(char a[],char b[],char back[])
{
int i,j,k,up,x,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]='\0';
for(k-=1;k>=0;k--)
back[i++]=c[k];
back[i]='\0';
}
int main()
{
char a[3][1000],temp[1000];
int roll=3;
while(scanf("%s%s%s",a[0],a[1],a[2]) !=EOF)
{
for (int i=3;i<=99;i++)
{
add(a[(i-1)%3],a[(i-2)%3],temp);
add(temp,a[(i-3)%3],a[i%3]);
}
printf("%s\n",a[0]);
}
}