一道ACM的简单题“某种序列”

1、描述
某种序列
数列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

OJ:http://acm.nyist.net/JudgeOnl...
2、问题
测试数据可以通过,提交显示wrong answer

#include <iostream>
#include <cstring>
#define maxn 1005
using namespace std;
int a[maxn],b[maxn],c[maxn],sum[maxn];

void init(int x,int a[maxn]){
    int i=maxn-1;
    while(x){
        a[i--]=x%10;
        x/=10;
    }
}
int main(){
    int ta,tb,tc;
    while(cin>>ta>>tb>>tc){
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        init(ta,a);init(tb,b);init(tc,c);
        for(int i=3;i<100;i++){
            memset(sum,0,sizeof(sum));
            for(int j=maxn-1;j>=0;j--){
                sum[j]+=(a[j]+b[j]+c[j]);
                if(sum[j]>9){
                    sum[j-1]=sum[j]/10;
                    sum[j]%=10;
                }
            }
            memcpy(a,b,sizeof(b));            
            memcpy(b,c,sizeof(c));
            memcpy(c,sum,sizeof(sum));
        }
        int flag=0;
        for(int i=0;i<maxn;i++){
            if(sum[i]!=0){
                flag=1;
            }
            if(flag){
                cout<<sum[i];
            }
        }
        cout<<endl;
    }
    return 0;
}

求教~

阅读 2.4k
2 个回答

代码0 0 0为空

果然是少考虑了0 0 0的情况。
AC代码如下:

#include <iostream>
#include <cstring>
#define maxn 1005
using namespace std;
int a[maxn],b[maxn],c[maxn],sum[maxn];

void init(int x,int a[maxn]){
    int i=maxn-1;
    while(x){
        a[i--]=x%10;
        x/=10;
    }
}
int main(){
    int ta,tb,tc;
    while(cin>>ta>>tb>>tc){
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        init(ta,a);init(tb,b);init(tc,c);
        for(int i=3;i<100;i++){
            memset(sum,0,sizeof(sum));
            for(int j=maxn-1;j>=0;j--){
                sum[j]+=(a[j]+b[j]+c[j]);
                if(sum[j]>9){
                    sum[j-1]=sum[j]/10;
                    sum[j]=sum[j]%10;
                }
            }
            memcpy(a,b,sizeof(b));            
            memcpy(b,c,sizeof(c));
            memcpy(c,sum,sizeof(sum));
        }
        int flag=0;
        for(int i=0;i<maxn;i++){
            if(sum[i]!=0){
                flag=1;
            }
            if(flag){
                cout<<sum[i];
            }
        }
        if(flag==0) cout<<0;
        cout<<endl;
    }
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题