问题分析
要求:用100元钱买100只鸡,其中公鸡5元一只,母鸡3元一只,小鸡1元三只,问公鸡、母鸡、小鸡各买多少只?

(图片来源网络,侵删)
我们可以用数学方法来建模这个问题:
- 设公鸡的数量为
cock。 - 设母鸡的数量为
hen。 - 设小鸡的数量为
chick。
根据题意,可以列出以下两个方程:
- 数量方程:
cock + hen + chick = 100 - 金额方程:
5 * cock + 3 * hen + (chick / 3) = 100
(注意:小鸡是“1元三只”,chick 必须是3的倍数,chick / 3 就是小鸡的总价。)
我们的目标就是找到所有满足这两个方程的非负整数解 (cock, hen, chick)。

(图片来源网络,侵删)
C语言解法思路
最直观的方法是使用穷举法(也称为暴力搜索),我们可以尝试所有可能的公鸡和母鸡的数量,然后计算出对应的小鸡数量,再检查是否满足所有条件。
算法步骤:
- 创建三个变量
cock,hen,chick分别代表公鸡、母鸡、小鸡的数量。 - 使用一个
for循环来遍历公鸡的可能数量,因为100元钱最多买100 / 5 = 20只公鸡,cock的范围是0到20。 - 在循环内部,再嵌套一个
for循环来遍历母鸡的可能数量,同理,母鸡最多买100 / 3 ≈ 33只,hen的范围是0到33。 - 在两层循环内部,根据当前
cock和hen的值,计算出小鸡的数量:chick = 100 - cock - hen。 - 现在我们有了三个变量的值,需要检查它们是否满足所有条件:
- 条件1:小鸡的数量
chick必须大于或等于0。 - 条件2:小鸡的数量
chick必须是3的倍数(因为不能买半只小鸡)。 - 条件3:总金额必须等于100元:
5 * cock + 3 * hen + chick / 3 == 100。
- 条件1:小鸡的数量
- 如果以上三个条件都满足,就找到了一个有效的解,将其打印出来。
- 当所有循环结束后,程序也就找到了所有可能的解。
C语言完整代码
下面是使用C语言实现的完整代码,包含了详细的注释。
#include <stdio.h>
int main() {
int cock, hen, chick; // 定义公鸡、母鸡、小鸡的数量
printf("百钱买百鸡问题求解:\n");
printf("公鸡(5元/只) | 母鸡(3元/只) | 小鸡(1元/3只)\n");
printf("--------------------------------------------\n");
// 外层循环遍历公鸡的数量,最多买 100/5 = 20 只
for (cock = 0; cock <= 20; cock++) {
// 内层循环遍历母鸡的数量,最多买 100/3 = 33 只
for (hen = 0; hen <= 33; hen++) {
// 根据公鸡和母鸡的数量,计算出小鸡的数量
chick = 100 - cock - hen;
// 检查是否满足所有条件
// 1. 小鸡数量不能为负数
// 2. 小鸡数量必须是3的倍数
// 3. 总金额必须等于100元
if (chick >= 0 && chick % 3 == 0 && (5 * cock + 3 * hen + chick / 3) == 100) {
// 如果满足条件,打印结果
printf("公鸡: %2d 只, 母鸡: %2d 只, 小鸡: %2d 只\n", cock, hen, chick);
}
}
}
return 0;
}
代码解释
#include <stdio.h>: 包含标准输入输出库,以便使用printf函数。int main(): 程序的入口函数。int cock, hen, chick;: 定义三个整型变量来存储鸡的数量。for (cock = 0; cock <= 20; cock++): 循环cock从 0 到 20。for (hen = 0; hen <= 33; hen++): 在cock的循环内部,再循环hen从 0 到 33。chick = 100 - cock - hen;: 计算出小鸡的数量。if (...): 这是核心的条件判断。chick >= 0: 确保小鸡数量不是负数。chick % 3 == 0: 是取余运算符,这个条件确保chick能被3整除。(5 * cock + 3 * hen + chick / 3) == 100: 检查总花费是否正好是100元。
printf(...):if条件成立,就打印出一组符合条件的解。%2d是格式化输出,确保数字对齐,看起来更美观。
运行结果
将以上代码编译并运行,会得到以下输出:

(图片来源网络,侵删)
百钱买百鸡问题求解:
公鸡(5元/只) | 母鸡(3元/只) | 小鸡(1元/3只)
--------------------------------------------
公鸡: 0 只, 母鸡: 25 只, 小鸡: 75 只
公鸡: 4 只, 母鸡: 18 只, 小鸡: 78 只
公鸡: 8 只, 母鸡: 11 只, 小鸡: 81 只
公鸡: 12 只, 母鸡: 4 只, 小鸡: 84 只
这四组就是所有满足条件的购买方案,这个例子很好地展示了如何用C语言的循环和条件语句来解决实际的数学问题。
