#include<stdio.h> int main() { int years; int n1,n2,n3,n4; while(scanf("%d",&years)!=EOF) { n1=n2=n3=0; n4=1; if(years ==0) break; for(int i=1;i<years;i++) { n4+=n3; n3=0; n3+=n2; n2=0; n2+=n1; n1=0; n1+=n4; } printf("%d\n",n1+n2+n3+n4); } }
第二种解法:
斐波那契数列,设年数为 i ,如果年数小于四,则母牛的数量是每年增加一只(只有最初的母牛可以产下小母牛),在第四年之后(也就是第五年,因为定义的数组下标是从0开始,所以是i==4时),母牛的个数变为a[i-1]+a[i-3] (意思为前一年的母牛数加上前面第三年的母牛数,因为前第三年的母牛在今年每只都可以产下一只小母牛),最后得出总共的母牛数a[i-1](因为在跳出循环后 i 多增了一次1)
C语言代码如下:
#include<stdio.h> int main() { int a[100]; a[0]=1; int years,i; while(scanf("%d",&years)!=EOF) { if(years==0) break; for(i=1;i<years;i++) { if(i<4) a[i]=a[i-1]+1; else a[i]=a[i-1]+a[i-3]; } printf("%d\n",a[i-1]); } }
原文:https://www.cnblogs.com/wzmm/p/12518914.html