原标题:C语言经典问题--百钱买百鸡问题
大家好!今天我们来介绍C语言中一个著名的问题:百钱买百鸡的问题。
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
其大意就是:公鸡一只五元钱,母鸡一只三元钱,小鸡三个一元钱。问:100元买了100只鸡,其中公鸡、母鸡和小鸡各有多少只?
问题分析:首先我们如果对此问题进行数学求解的话,我们能够看出每一种鸡的数量不是一个定数。
根据题意设公鸡、母鸡和雏鸡分别为 cock、hen 和 chick,如果 100 元全买公鸡,那么最多能买 20 只,所以 cock 的范围是大于等于 0 且小于等于 20;如果全买母鸡,那么最多能买 33 只,所以 hen 的范围是大于等于 0 且小于等于 33;如果 100 元钱全买小鸡,那么最多能买 99 只(根据题意小鸡的数量应小于 100 且是 3 的倍数)。
在确定了各种鸡的范围后进行穷举并判断,判断的条件有以下 3 点:
(1) 所买的 3 种鸡的钱数总和为 100。
(2) 所买的 3 种鸡的数量之和为 100。
(3) 所买的小鸡数必须是 3 的倍数。
代码如下:
/*
中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱买百鸡问题”,
鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*/
#include
int main()
{
int cock, hen, chick; /*定义变童为基本整型*/
for (cock = 0; cock <= 20; cock++) /*公鸡范围在 0~20 之间*/
for (hen = 0; hen <= 33; hen++) /*母鸡范围在 0~33 之间*/
for (chick = 3; chick <= 99; chick++) /*小鸡范围在 3~99 之间*/
if (5 * cock + 3 * hen + chick / 3 == 100) /*判断钱数是否等于 100*/
if (cock + hen + chick == 100) /*判断购买的鸡数是否等于 100*/
if (chick % 3 == 0) /*判断小鸡数是否能被 3 整除*/
printf("公鸡:%d,母鸡:%d,小鸡:%d\n", cock, hen, chick);
return 0;
}
好了,今天的讲述就到这里了。返回搜狐,查看更多
责任编辑: