这题目有毒吧,下载了测试点,结果和我输出一毛一样,过不了

P1255 数楼梯

良夜 @ 2020-02-05 17:12:25

#include<iostream>
#include<cstdlib>
#include<string.h>
using namespace std;
int a1[10005]={0},a2[10005]={0},a3[10005]={0};
int n;
int num=1;
void fib()
{
    a1[1]=1,a2[1]=2;
    for(int i=3;i<=n;i++)
    {
        memset(a3,0,sizeof(a3));
        for(int j=1;j<=num;j++)
        {
            a3[j]+=a1[j]+a2[j];
            a3[j+1]+=a3[j]/10;
            a3[j]%=10;
            //cout<<a3[j]<<endl;
        }
        for(int k=1;k<=10005;k++)
            if(a3[k]!=0)
                num=k;
    /*  for(int i=num;i>0;i--)cout<<a1[i];
        cout<<" ";
        for(int i=num;i>0;i--)cout<<a2[i];
        cout<<" ";
        for(int i=num;i>0;i--)cout<<a3[i];
        cout<<" "<<num<<endl;*/
        for(int k=1;k<=num;k++)a1[k]=a2[k],a2[k]=a3[k];
    }
}
int main()
{
    cin>>n;
    if(n<3)
    {
        cout<<n;
        return 0;
    }
    fib();
    for(int i=num;i>0;i--)cout<<a3[i];
    return 0;
}

by cstdios @ 2020-02-05 17:17:59

@恬淡看风

for(int k=1;k<=10005;k++)

这个语句会RE,你的数组会越界。


by 良夜 @ 2020-02-05 17:22:16

@cstdios 点睛之笔,的确是这个原因


|