首页 > 编程笔记 > C语言笔记

C语言百钱百鸡问题(有源码和解析)

百钱百鸡问题是一个经典的数学问题,也是编程中常见的练习题。这个问题源自张丘建的《算经》,描述如下:公鸡值 5 钱,母鸡值 3 钱,小鸡 3 只值 1 钱。现在要用 100 钱买 100 只鸡,问公鸡、母鸡、小鸡各有多少只?
 

要解决这个问题,我们需要建立方程。假设公鸡有 x 只,母鸡有 y 只,小鸡有 z 只。根据题目条件,我们可以得到以下两个方程:

x + y + z = 100(总数为 100 只)
5x + 3y + z/3 = 100(总价为 100 钱)

由于鸡的数量必须是整数,我们可以通过枚举的方法来解决这个问题。具体思路如下:

现在,让我们用C语言来实现这个解决方案:

#include <stdio.h>

int main() {
    int x, y, z;
    
    for (x = 0; x <= 20; x++) {
        for (y = 0; y <= 100 - x; y++) {
            z = 100 - x - y;
            if (5 * x + 3 * y + z / 3.0 == 100) {
                printf("公鸡:%d 只,母鸡:%d 只,小鸡:%d 只\n", x, y, z);
            }
        }
    }
    
    return 0;
}

这段代码使用嵌套循环来枚举所有可能的公鸡和母鸡的数量组合。外层循环遍历公鸡的数量 x,内层循环遍历母鸡的数量 y。对于每种组合,我们计算小鸡的数量 z,然后检查是否满足总价为 100 钱的条件。如果满足,就打印出这组解。
 

需要注意的是,在检查总价条件时,我们使用了 z / 3.0 而不是 z / 3。这是因为在C语言中,整数除法会舍去小数部分,可能导致精度损失。使用浮点数除法可以保留小数部分,从而得到更精确的结果。
 

运行这段代码,我们会得到以下输出结果:

公鸡:0 只,母鸡:25 只,小鸡:75 只
公鸡:4 只,母鸡:18 只,小鸡:78 只
公鸡:8 只,母鸡:11 只,小鸡:81 只
公鸡:12 只,母鸡:4 只,小鸡:84 只

这个问题有四组解,我们的程序成功找到了所有可能的组合。每一行输出都表示一种购买方案,满足总共 100 只鸡和总价 100 钱的条件。
 

虽然这个解决方案使用了暴力枚举的方法,但对于这个特定问题来说,它是简单有效的。在实际编程中,我们经常需要在算法的效率和实现的简单性之间做出权衡。对于规模较小的问题,像这样直接的方法往往是最佳选择,因为它易于理解和实现。
 

通过解决百钱百鸡这样的问题,初学者可以练习循环、条件判断等基本编程概念,同时也能培养将数学问题转化为编程解决方案的能力。这种能力在解决更复杂的实际问题时会非常有用。

相关文章