1 条题解
-
1
百鸡问题 完整题解(C++)
针对GESP二级的百鸡问题,我为你提供完全匹配题目要求、可直接提交的代码,同时详细解释解题思路,适合学生理解和考试使用。
最终可提交代码(无冗余、符合考试规范)
#include <iostream> using namespace std; int main() { int x, y, z, n, m; cin >> x >> y >> z >> n >> m; int count = 0; // 统计合法方案数 // 枚举公鸡数量(gj):0到总鸡数m for (int gj = 0; gj <= m; gj++) { // 枚举母鸡数量(mj):0到剩余鸡数(m - gj) for (int mj = 0; mj <= m - gj; mj++) { int xj = m - gj - mj; // 小鸡数量 = 总鸡数 - 公鸡数 - 母鸡数 // 条件1:小鸡数量必须是z的倍数(不能买半只) if (xj % z != 0) { continue; } // 计算总花费 int total = gj * x + mj * y + xj / z; // 条件2:总花费等于n元 if (total == n) { count++; } } } cout << count << endl; return 0; }解题思路
-
明确已知条件:
- 公鸡x元/只,母鸡y元/只,z只小鸡1元;
- 总钱数n元,总鸡数m只;
- 要求:买的鸡总数正好m只,总花费正好n元,小鸡数量必须是z的倍数(因为z只才1元,不能拆分)。
-
枚举法核心逻辑:
- 用两层循环分别试公鸡(gj)和母鸡(mj)的数量(从0开始试);
- 小鸡数量(xj)不用试,直接算:
xj = 总鸡数 - 公鸡数 - 母鸡数; - 检查两个条件:
✅ 小鸡数量是z的倍数(
xj % z == 0); ✅ 总花费 = 公鸡总价 + 母鸡总价 + 小鸡总价,且等于n元。
-
举例验证(样例1): 输入
5 3 3 100 100:- 当gj=0、mj=25时,xj=75; 花费:0×5 + 25×3 + 75÷3 = 0+75+25=100元,符合条件,计数+1;
- 当gj=4、mj=18时,xj=78; 花费:4×5 + 18×3 + 78÷3 = 20+54+26=100元,符合条件,计数+1;
- 以此类推,最终统计出4种方案。
代码运行验证
输入 输出 说明 5 3 3 100 100 4 经典百鸡问题,共4种方案 1 1 1 100 100 5151 全1元时的所有组合数 总结
- 核心方法:枚举法(试数法),先枚举公鸡和母鸡数量,再计算小鸡数量,最后验证条件;
- 关键条件:
- 数量条件:
gj + mj + xj = m; - 倍数条件:
xj % z == 0; - 价格条件:
gj*x + mj*y + xj/z = n;
- 数量条件:
- 代码特点:逻辑简单、无冗余,完全符合GESP二级考试要求,运行时间和内存均满足题目限制(1000ms/256MiB)。
-
- 1
信息
- ID
- 675
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 16
- 已通过
- 4
- 上传者