HDU - 2018

HDU - 2018

題目:

母牛的故事

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表示輸入數據的結束,不做處理。
 

 

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章