vlambda博客
学习文章列表

C语言经典问题---“百钱买百鸡”问题

大家好!今天我们来介绍C语言中一个著名的问题:百钱买百鸡的问题。

中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

其大意就是:公鸡一只五元钱,母鸡一只三元钱,小鸡三个一元钱。问:100元买了100只鸡,其中公鸡、母鸡和小鸡各有多少只?

问题分析:首先我们如果对此问题进行数学求解的话,我们能够看出每一种鸡的数量不是一个定数。根据题意设公鸡、母鸡和雏鸡分别为 x、y 和 z,如果 100 元全买公鸡,那么最多能买 20 只,所以 x 的范围是大于等于 0 且小于等于 20;如果全买母鸡,那么最多能买 33 只,所以 y 的范围是大于等于 0 且小于等于 33;如果 100 元钱全买小鸡,那么最多能买 99 只(根据题意小鸡的数量应小于 100 且是 3 的倍数)。

并且,我们只能从以下几个方面来进行分析:

第一个方面:就是总钱数为100;

第二个方面:就是总鸡数为100


代码如下:

/*

中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,

鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?

*/

#include<stdio.h>

int main()

{

    int x, y, z;   /*定义公鸡的数量为x,定义母鸡的数量为y,定义小鸡的数量为z*/

 

    for (x = 0; x <= 20; x++)  

 

        for (y = 0; y <= 33; y++)   

 

            for (z= 3; z <= 99;z++)   

 

                if (5 * x+ 3 * y + z/ 3 == 100)   

 

                    if (x+ y+ z ==100) 

 

                        if (z % 3 ==0)   /*判断小鸡数是否能被 3 整除*/

 

                            printf("公鸡:%d,母鸡:%d,小鸡:%d\n", x, y, z);

 

    return 0;

}


好了,今天的讲述就到这里了。你明白了吗?