题目:
母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 147445 Accepted Submission(s): 72491
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
lcy
题解方法一:开个数组模拟每年每种情况牛的数目和变化
代码:(我一直wr在输入判断...,昏了头忘了n==0结束了)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int a[5];
int main()
{
int t, i, j, ans, n, m;
while(scanf("%d", &n)!=EOF&&n!=0){
memset(a,0,sizeof(a));
a[3]=1;
for(int i=1;i<n;i++){
a[3] += a[2];//年初的可以生小牛的牛,今年的成年
a[2] = a[1];//第三年的牛
a[1] = a[0];//第二年的牛
a[0] = a[3];//新出生的牛
}
ans = a[0]+a[1]+a[2]+a[3];
printf("%d\n",ans);
}
return 0;
}
方法二:递推的思路,今年的牛的数量=去年的牛的数量+去年的牛生的小牛的数量,又因为只有第四个年头的牛能生产,所以去年生的小牛的数量即为三年前的牛的数量。所以递推式为:cows[i] = cows[i-1] + cows[i-3]
代码:
#include <stdio.h>
int main()
{
int cows[55] = {0, 1, 2, 3, 4};
int n, i;
for(i = 5; i < 55; i++)
cows[i] = cows[i-1] + cows[i-3];
while(scanf("%d", &n) != EOF)
{
if(n == 0)
break;
printf("%d\n", cows[n]);
}
return 0;
}