题解
【入门】马克思手稿的问题
1 条题解
-
0
解题思路
30 个人去吃饭共花了 50 先令,男人花 3、女人花 2、小孩花 1。问男人、女人、小孩各有多少。
设男人 i 个、女人 j 个、小孩 k 个,要满足:
- 人数 30:i + j + k = 30
- 钱数 50:3×i + 2×j + 1×k = 50
思路:枚举所有可能,检查条件。
- 男人最多 50÷3 个(钱不够买更多),女人最多 50÷2 个,小孩最多 50 个
- 三重循环枚举 i、j、k 的所有组合
- 每组合检查人数是否 30、钱数是否 50
- 都满足就输出
这种办法叫穷举法,虽然要试很多组合,但数量不大,程序跑得很快。
参考代码
#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