[GESP202303 二级] 百鸡问题

[GESP202303 二级] 百鸡问题

GESP二级练习,多层循环和分支嵌套练习,难度★✮☆☆☆。

luogu-B3836 [GESP202303 二级] 百鸡问题

题目要求

题目描述

“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:

“每只公鸡 55 元,每只母鸡 33 元,每 33 只小鸡 11 元;现在有 100100 元,买了 100100 只鸡,共有多少种方案?”

小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 xx 元,每只母鸡 yy 元,每 zz 只小鸡 11 元;现在有 nn 元,买了 mm 只鸡,共有多少种方案?

输入格式

输入一行,包含五个整数,分别为问题描述中的 xxyyzznnmm。约定 1x,y,z101 \le x,y,z \le 101n,m10001 \le n,m \le 1000

输出格式

输出一行,包含一个整数 CC,表示有 CC 种方案。

样例输入 #1

5 3 3 100 100

样例输出 #1

4

样例输入 #2

1 1 1 100 100

样例输出 #2

5151

提示

这就是问题描述中的“百鸡问题”。44 种方案分别为:

  • 公鸡 00 只、母鸡 2525 只、小鸡 7575 只。
  • 公鸡 44 只、母鸡 1818 只、小鸡 7878 只。
  • 公鸡 88 只、母鸡 1111 只、小鸡 8181 只。
  • 公鸡 1212 只、母鸡 44 只、小鸡 8484 只。

题目分析

这是一个典型的枚举算法问题。我们可以使用两层循环来枚举所有可能的鸡的数量组合,然后判断是否满足条件。在内层循环中,我们需要注意小鸡的数量必须是zz的整数倍,且总金额必须等于给定的金额。

{% include custom/custom-post-content-inner.html %}

示例代码

#include <iostream>
using namespace std;
int main() {
    int x, y, z, n, m;
    cin >> x >> y >> z >> n >> m; // 读取输入的x, y, z, n, m
    int count = 0; // 初始化计数器
    for (int i = 0; i <= 1000; i++) { // 外层循环控制公鸡数量
        for (int j = 0; j <= 1000; j++) { // 内层循环控制母鸡数量
            int chick_num = m - i - j; // 计算小鸡数量
            if (chick_num >= 0 && chick_num % z == 0 && i* x + j* y + chick_num / z == n) { // 如果小鸡数量大于等于0且能被z整除且满足条件
                count++; // 计数器加1
            }
        }
    }
    cout << count; // 输出结果
    return 0; // 返回0,表示程序正常结束
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on