窮舉法是程式員常用的手法,參見《雞兔同籠》。
雞兔同籠問題是《孫子算經》卷下中的第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;
}