top1编程
← 返回题目
题解

鸡兔同笼

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4405 鸡兔同笼(入门)

    解题思路

    题目说"上有35个头,下有94只脚",问鸡和兔各几只。小鸡有2只脚,小兔有4只脚,这是题目默认的常识。我们可以把所有可能的情况都试一遍,这就是"枚举"。用双层for循环:外层循环让鸡的数量c从0变到35,内层循环让兔的数量r也从0变到35,每次检查两个条件:一是 c+r 必须等于 35(头的数量),二是 2×c+4×r 必须等于 94(脚的数量)。两个条件同时成立,这组数据就是答案。为什么从0开始枚举呢?因为鸡或兔的数量有可能为0,比如全是兔子的时候鸡就是0只。枚举到35是因为最多35个头,任何一只动物的数量都不可能超过35。找到答案后可以用 return 0 提前结束,因为鸡兔同笼问题只有唯一解,不需要继续找。边界情况:如果某次枚举头数对了但脚数不对,就继续下一组;如果一只动物都没有(c=0、r=0),脚数一定是0,不满足条件,不会被当作答案。本题保证数据一定有解,所以程序一定能在循环里找到答案。

    参考代码

    // 程序用途:用双层for循环枚举鸡和兔的数量,解决鸡兔同笼问题
    #include <iostream>
    using namespace std;
    
    int main() {
        for (int c = 0; c <= 35; c++) {         // 外层循环枚举鸡的数量c
            for (int r = 0; r <= 35; r++) {     // 内层循环枚举兔的数量r
                if (c + r == 35 && c * 2 + r * 4 == 94) {
                    cout << c << " " << r << endl;  // 输出鸡和兔的数量
                    return 0;                       // 找到答案就结束
                }
            }
        }
        return 0;
    }
    

    复杂度分析

    外层循环枚举36种鸡的数量,内层循环枚举36种兔的数量,一共要检查 36×36≈1300 种组合,这是固定次数,与输入规模无关,所以时间复杂度 O(1);整个程序只用几个循环变量,没有用数组,额外空间复杂度 O(1)。

    • 1