这是《孙子算经》卷下中的第31题。
今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?答曰:雉二十三。兔一十二。
初学者通常用穷举法来解这种问题,即把所有可能都试一遍,找出满足条件的解。
即便是使用穷举法,也需要把程序编得具有一定的通用性,比如说头或脚的数量变了程序也应该能够不用修改也能计算。另外循环控制方面也应该尽可能的少。
程序中,变量i假定为鸡的数量,变量j假定为兔子的数量。那么,i+j为头数,2i+4j为脚数。这个程序是经典的穷举法+试探法的过程,并非是唯一的解法。
程序如下:
/* 鸡兔同笼,今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何? */ #include <stdio.h> #define MIN(x, y) (((x)>(y))?(y):(x)) #define HEADS 35 #define FOOT 94 int main(void) { int i, j; for(i=0; i<=MIN(HEADS, FOOT/2); i++) for(j=0; j<=MIN(HEADS, FOOT/4); j++) if(i+j==HEADS && i*2+j*4 == FOOT) printf("chicken=%d, rabbit=%d ", i, j); return 0; }程序运行结果如下:
chicken=23, rabbit=12