oj 2018

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


代码:

#include<stdio.h>

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<n;i++){

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

                num=c[i];

            }

        }

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

    }

}


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



感谢cxq2016的这一篇文章。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容