天天看點

I00023 雞兔同籠解法二

窮舉法是程式員常用的手法,參見《雞兔同籠》。

I00023 雞兔同籠解法二

雞兔同籠問題是《孫子算經》卷下中的第31題。今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何?答曰:雉二十三。兔一十二。

一天,老師布置家庭作業,做雞兔同籠問題。小明不喜歡做複雜計算,回家後開始訓練雞和兔。小明吹一聲哨,雞和兔都擡起一條腿,小明又吹一聲哨,雞和兔又再擡起一條腿,雞就一屁股坐地下了,兔兩腿站立。于是,小明明白了應該怎麼算這個題。兔的數量=(腳數-頭數-頭數)/2,雞的數量=頭數-兔的數量。

程式員要解決實際問題,需要面對三個世界,一是現實世界,二是數學世界,三是資料世界。現實世界中的問題可以先放到數學世界中解決,最後再進入資料世界并且編寫程式解決。

這裡給出的程式,可以輸入多組頭和腳的數量。根據輸入的頭和腳的數量,計算出雞和兔的數量。

程式如下:

/* 雞兔同籠,今有雉兔同籠,上有三十五頭,下有九十四足,問雉兔各幾何? */

#include <stdio.h>

int main(void)
{
    int head, feet, rabbit;

    printf("Please enter the number of feet and head:\n");
    while(scanf("%d%d", &head, &feet) != EOF) {
        if(head <= 0 || feet <= 0 || head * 2 > feet
                || head *  4 < feet
                || (feet - 2 * head) % 2 != 0)
            printf("Input error!\n");
        else {
            rabbit = (feet - 2 * head) / 2;
            printf("chicken=%d, rabbit=%d\n", head - rabbit, rabbit);
        }
    }

    return 0;
}