題目:
母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 147445 Accepted Submission(s): 72491
n=0表示輸入數據的結束,不做處理。
每個輸出佔一行。
題解方法一:開個數組模擬每年每種情況牛的數目和變化
代碼:(我一直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;
}