C语言实例之求解鸡兔同笼

C/C++
269
0
0
2022-11-14

题目:

已知笼子里鸡、兔共有m只,鸡兔共有n只脚,请你用C语言设计程序求鸡、兔各有多少只。

核心思路

假设全都是兔,则有鸡数=(4×鸡兔总数-实际脚数)÷(4-2);

假设全都是鸡,则有兔数=(实际脚数-2×鸡兔总数)÷(4-2);

需要注意:鸡的只数兔的只数只可能是大于等于0

源代码如下:

#include <stdio.h>

int main() {
    int m, n;
    printf("请输入鸡兔共多少只:\n");
    scanf("%d", &m);
    printf("请输入鸡兔共多少只脚:\n");
    scanf("%d", &n);
    if ((n - 2 * m) >= 0 && (n - 2 * m) % 2 == 0 && (4 * m - n) >= 0 && (4 * m - n) % 2 == 0) {
        printf("鸡有%d只,兔有%d只", (4 * m - n) / 2, (n - 2 * m) / 2);
    } else {
        printf("您的输入有误!");
    }
    return 0;
}

编译运行上面的代码:

请输入鸡兔共多少只:
15
请输入鸡兔共多少只脚:
36
鸡有12只,兔有3只

拓展:求解百钱百鸡

题目:

我国古代数学家张丘建在《算经》一书中曾提出过著名的“百钱买百鸡”问题,该问题叙述如下:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,则翁、母、雏各几何?翻译后的意思是公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?请你用C语言设计程序求公鸡、母鸡、小鸡各多少只。

核心思路

设公鸡 x 只,母鸡 y 只,小鸡 z 只,得到以下方程式组:

    5x + 3y + 1 / 3z = 100
    x + y + z = 100
    0 <= x <= 100
    0 <= y <= 100
    0 <= z <= 100

源代码如下:

#include <stdio.h>

int main() {
    int i, j, k;
    for (i = 0; i <= 100; i++) {
        for (j = 0; j <= 100; j++) {
            for (k = 0; k <= 100; k++) {
                if (5 * i + 3 * j + k / 3 == 100 && k % 3 == 0 && i + j + k == 100) {
                    printf("公鸡 %2d 只,母鸡 %2d 只,小鸡 %2d 只\n", i, j, k);
                }
            }
        }
    }
    return 0;
}

编译运行上面的代码,将会输出以下结果:

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