HDOJ 2018 母牛的故事

来源:互联网 发布:php 数值 偏移量 编辑:程序博客网 时间:2024/04/29 22:50

开始的代码是错误的,后来的代码是正确的,但是我不知道为啥。感觉这样对我没啥帮助,想彻底搞清楚为什么。希望会对我自己有点帮助。

WA代码:

#include<iostream>#include<cstdio>using namespace std;int main(){    int n;    while(cin >> n && n!=0){        int a[55]={0};a[1]=1;a[2]=1;a[3]=1;a[4]=1;        int i,j,sum=0;        if(n<=4){            for(i=1;i<=n;i++)                sum+=a[i];        }        else{            for (i=5;i<=n;i++){                for (j=1;j<=n-3;j++){                    //printf("a[%d]=%d\n",j,a[j]);                    a[i]+=a[j];                    //printf("a[%d]=%d\n",i,a[i]);                }                //printf("a[%d]=%d\n",i,a[i]);            }            for (i=1;i<=n;i++)                sum+=a[i];        }        cout << sum << endl;    }    return 0;}
被AC了的代码:

#include<iostream>#include<cstdio>using namespace std;int main(){    int n;    while(cin >> n && n!=0){        int a[55]={0};a[1]=1;a[2]=1;a[3]=1;a[4]=1;        int i,j,sum=0;        if(n<=4){            for(i=1;i<=n;i++)                sum+=a[i];        }        else{            for (i=5;i<=n;i++){                a[i]=a[i-1]+a[i-3];            }            for (i=1;i<=n;i++)                sum+=a[i];        }        cout << sum << endl;    }    return 0;}

努力搞清楚为什么。当n=10的时候就出现了相等的情况。


补充:


原因是:在else中的第二个for循环里面j要小于等于的数不对,导致了整个程序中到了那个for循环时都循环n-3次,但是实际上是,循环的次数和上一个for循环的i的值有关,并且是i-3次。因此只需要将n改成i即可

0 0