题目链接: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的这一篇文章。