HDoj 2018 母牛的故事
时间:2020-03-18 21:01:53
收藏:0
阅读:47
Problem Description
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
n=0表示输入数据的结束,不做处理。
Output
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
每个输出占一行。
Sample Input
2
4
5
0
Sample Output
2
4
6
Author
lcy
Source
Recommend
我的解法:将一岁,两岁,三岁,四岁的母牛分别定义变量n1,n2,n3,n4,每过去一年,一岁的变为两岁,两岁的变为三岁,三岁的变为四岁,而每个四岁的又能产下一岁的小母牛。这样不断循环,最后输出n1到n4之和
C语言代码如下:
#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
评论(0)