[GESP202303 二级] 百鸡问题
GESP二级练习,多层循环和分支嵌套练习,难度★✮☆☆☆。
luogu-B3836 [GESP202303 二级] 百鸡问题
题目要求
题目描述
“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:
“每只公鸡 元,每只母鸡 元,每 只小鸡 元;现在有 元,买了 只鸡,共有多少种方案?”
小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 元,每只母鸡 元,每 只小鸡 元;现在有 元,买了 只鸡,共有多少种方案?
输入格式
输入一行,包含五个整数,分别为问题描述中的 ,,,,。约定 ,。
输出格式
输出一行,包含一个整数 ,表示有 种方案。
样例输入 #1
5 3 3 100 100
样例输出 #1
4
样例输入 #2
1 1 1 100 100
样例输出 #2
5151
提示
这就是问题描述中的“百鸡问题”。 种方案分别为:
- 公鸡 只、母鸡 只、小鸡 只。
- 公鸡 只、母鸡 只、小鸡 只。
- 公鸡 只、母鸡 只、小鸡 只。
- 公鸡 只、母鸡 只、小鸡 只。
题目分析
这是一个典型的枚举算法问题。我们可以使用两层循环来枚举所有可能的鸡的数量组合,然后判断是否满足条件。在内层循环中,我们需要注意小鸡的数量必须是的整数倍,且总金额必须等于给定的金额。
{% 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 认证学习微信公众号

Last updated on