1 条题解

  • 1
    @ 2026-3-22 20:37:59

    百鸡问题 完整题解(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;
    }
    

    解题思路

    1. 明确已知条件

      • 公鸡x元/只,母鸡y元/只,z只小鸡1元;
      • 总钱数n元,总鸡数m只;
      • 要求:买的鸡总数正好m只,总花费正好n元,小鸡数量必须是z的倍数(因为z只才1元,不能拆分)。
    2. 枚举法核心逻辑

      • 用两层循环分别试公鸡(gj)和母鸡(mj)的数量(从0开始试);
      • 小鸡数量(xj)不用试,直接算:xj = 总鸡数 - 公鸡数 - 母鸡数
      • 检查两个条件: ✅ 小鸡数量是z的倍数(xj % z == 0); ✅ 总花费 = 公鸡总价 + 母鸡总价 + 小鸡总价,且等于n元。
    3. 举例验证(样例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元时的所有组合数

    总结

    1. 核心方法:枚举法(试数法),先枚举公鸡和母鸡数量,再计算小鸡数量,最后验证条件;
    2. 关键条件
      • 数量条件:gj + mj + xj = m
      • 倍数条件:xj % z == 0
      • 价格条件:gj*x + mj*y + xj/z = n
    3. 代码特点:逻辑简单、无冗余,完全符合GESP二级考试要求,运行时间和内存均满足题目限制(1000ms/256MiB)。
    • 1

    信息

    ID
    675
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    16
    已通过
    4
    上传者