oj 2018

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018


代码:

#include

int main(){

    int n;

    while(scanf("%d",&n)!=EOF && n){

        int k=1,num,c[100]={0},i;

        c[0]=1;

        c[1]=2;

        c[2]=3;

        c[3]=4;

        if(n==1) num=1;

        else if(n==2) num=2;

        else if(n==3) num=3;

        else if(n==4) num=4;

        else{

            for(i=4;i

                c[i]=c[i-1]+c[i-3];

                num=c[i];

            }

        }

        printf("%d\n",num);

    }

}


这道题困扰了我很久,暴力将牛存在数组之中,每到3岁就开始生,但这样子却产生了不同牛占了同一个地方,甚至有些牛一年疯长了2岁,这种方法失败了,又去找其他的方法。直接将牛的数量确定,那么牛三岁了就数量+1呗。可是判断牛是不是三岁,又再次进入了上面我并不会的循环之中。后来实在搞不定就找,找百度,找成功的,终于找到了一个简单的—>找规律,发现在第四年之后,每一年都会有上一年和前三年的牛加起来刚好就是这一年的牛,于是便有了上面的这一段代码。



感谢cxq2016的这一篇文章。

你可能感兴趣的:(oj 2018)