top1编程
← 返回题目
题解

【入门】马克思手稿的问题

1 条题解

  • 0
    @ 2026-7-31 11:36:59

    解题思路

    30 个人去吃饭共花了 50 先令,男人花 3、女人花 2、小孩花 1。问男人、女人、小孩各有多少。

    设男人 i 个、女人 j 个、小孩 k 个,要满足:

    1. 人数 30:i + j + k = 30
    2. 钱数 50:3×i + 2×j + 1×k = 50

    思路:枚举所有可能,检查条件。

    1. 男人最多 50÷3 个(钱不够买更多),女人最多 50÷2 个,小孩最多 50 个
    2. 三重循环枚举 i、j、k 的所有组合
    3. 每组合检查人数是否 30、钱数是否 50
    4. 都满足就输出

    这种办法叫穷举法,虽然要试很多组合,但数量不大,程序跑得很快。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        for (int i = 0; i <= 50 / 3; i++) {    // 男人 i 个
            for (int j = 0; j <= 50 / 2; j++) {  // 女人 j 个
                for (int k = 0; k <= 50; k++) {  // 小孩 k 个
                    if (i + j + k == 30 && i * 3 + j * 2 + k == 50) {
                        cout << i << " " << j << " " << k << endl;
                    }
                }
            }
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N³),三重循环枚举
    • 空间复杂度:O(1)
    • 1