【GESP】C++二级真题 luogu-B3836, [GESP202303 二级] 百鸡问题
GESP二级练习,多层循环和分支嵌套练习,难度★✮☆☆☆。
luogu-B3836 [GESP202303 二级] 百鸡问题
题目要求
题目描述
“百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:
“每只公鸡 $5$ 元,每只母鸡 $3$ 元,每 $3$ 只小鸡 $1$ 元;现在有 $100$ 元,买了 $100$ 只鸡,共有多少种方案?”
小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 $x$ 元,每只母鸡 $y$ 元,每 $z$ 只小鸡 $1$ 元;现在有 $n$ 元,买了 $m$ 只鸡,共有多少种方案?
输入格式
输入一行,包含五个整数,分别为问题描述中的 $x$,$y$,$z$,$n$,$m$。约定 $1 \le x,y,z \le 10$,$1 \le n,m \le 1000$。
输出格式
输出一行,包含一个整数 $C$,表示有 $C$ 种方案。
样例输入 #1
1
5 3 3 100 100
样例输出 #1
1
4
样例输入 #2
1
1 1 1 100 100
样例输出 #2
1
5151
提示
这就是问题描述中的“百鸡问题”。$4$ 种方案分别为:
- 公鸡 $0$ 只、母鸡 $25$ 只、小鸡 $75$ 只。
- 公鸡 $4$ 只、母鸡 $18$ 只、小鸡 $78$ 只。
- 公鸡 $8$ 只、母鸡 $11$ 只、小鸡 $81$ 只。
- 公鸡 $12$ 只、母鸡 $4$ 只、小鸡 $84$ 只。
题目分析
这是一个典型的枚举算法问题。我们可以使用两层循环来枚举所有可能的鸡的数量组合,然后判断是否满足条件。在内层循环中,我们需要注意小鸡的数量必须是$z$的整数倍,且总金额必须等于给定的金额。
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#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,表示程序正常结束
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权