I00013 鸡兔同笼

这是《孙子算经》卷下中的第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


原文地址:https://www.cnblogs.com/tigerisland/p/7564861.html