鍍金池/ 問答/人工智能  C  C++  HTML/ 一道ACM的簡單題“某種序列”

一道ACM的簡單題“某種序列”

1、描述
某種序列
數(shù)列A滿足An = An-1 + An-2 + An-3, n >= 3 
編寫程序,給定A0, A1 和 A2, 計算A99
輸入
輸入包含多行數(shù)據(jù) 
每行數(shù)據(jù)包含3個整數(shù)A0, A1, A2 (0 <= A0, A1, A2 <= 100000000) 
數(shù)據(jù)以EOF結(jié)束
輸出
對于輸入的每一行輸出A99的值
樣例輸入
1 1 1
樣例輸出
69087442470169316923566147

OJ:http://acm.nyist.net/JudgeOnl...
2、問題
測試數(shù)據(jù)可以通過,提交顯示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;
}

求教~

回答
編輯回答
喜歡你

代碼0 0 0為空

2018年3月22日 03:02
編輯回答
任她鬧

果然是少考慮了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;
}
2017年4月12日 14:16