假期编程
此博客链接:https://www.cnblogs.com/ping2yingshi/p/12259683.html
母牛的故事(47min)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2018
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
题解:
闲白:此题一开始我就在想第一年母牛生不生,然后我对象说肯定不生啊,人家母牛还要怀孕一年,所以第二年才生,所以第二年母牛数才是2,然后我说这意思是母牛以后每年是前面生完就怀孕下一年就生,都不带休息的,然后我对象哈哈哈哈哈(PS此母牛也是厉害,生的全是母牛)。
正解:此题一开始也是不会的,是参考了别人思路写的代码。此题感觉就像斐波那契数一样,需要初始化母牛个数,然后根据每年母牛变化改变对应母牛的数,这里需要注意两点:
1.新的能生母牛的数等于上一次能生母牛的只数加上上次生的第三年的母牛只数。
2.新的第一年生下的母牛数等于上一次能生母牛的只数,因为上次能生母牛的母牛都会生小的母牛。
代码如下:
#include<stdio.h> #include<math.h> #include<stdlib.h> int main(void) { int n; while(~scanf("%d",&n)) { if(n==0) break; int i; int sum=1; int oldcow=1;//能生母牛的母牛 int onecow=0;//生一年的母牛 int twocow=0;//生两年的母牛 int threecow=0;//生三年的母牛 for(i=1;i<n;i++) { oldcow=oldcow+threecow;这次能生的母牛等于上一次能生母牛的只数加上上一次 生三年的母牛 threecow=twocow; twocow=onecow; onecow=oldcow;//第一年生的母牛等于上一次能生母牛的只数 sum=oldcow+twocow+threecow+onecow; } printf("%d",sum); printf("\n"); } return 0; }
出来混总是要还的