母牛的故事

母牛的故事

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 92642    Accepted Submission(s): 45710

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

以下是我的第一次錯誤代碼:

#include <stdio.h>

int main()
{
    int n;
    while(scanf("%d", &n) != EOF)
    {
        int x = 4, i;
        if(n == 0)
            break;
        else if(n >= 1 && n <=4)
            printf("%d\n", n);
        else if(n > 4)
        {
            for(i = 6; x < n-1; x++)
                i += (x - 1);//此處只考慮了第一隻奶牛生的奶牛長大了,而沒有考慮其他奶牛生的長大
            printf("%d\n", i);
        }
    }
    return 0;
}

進行修改,最好是使用遞歸函數,但是仍然處於瞭解階段,我不能熟練使用遞歸函數。

即使遞歸函數並沒有比迭代法好多少,在某些問題上還是程序更短,更易讀。

易讀性對於程序來說是非常重要的。

AC代碼:

#include <stdio.h>

int cownum(int shu)
{
    if(shu >= 1 && shu <= 4)
        return shu;
    else
        return cownum(shu - 1) + cownum(shu - 3);
}
int main()
{
    int n;
    while(scanf("%d", &n) != EOF)
    {
        if(n == 0)
            break;
        printf("%d\n", cownum(n));
    }
    return 0;
}



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