题目描述
有些孩子在院子里玩耍。您注意到以下内容:
当他们每两人一组时,多出r2人。
当他们每三人一组时,多出r3人。
当他们每五人一组时,多组r5人。
输出满足上面要求的最少的小孩数量。
输入格式
一行,三个整数: r2, r3, r5。 0<=r2<=1, 0<=r3<=2, 0<=r5<=4。
输出格式
一个正整数。
输入/输出例子1
输入:
1 0 4
输出:
9
代码思路分析
-
变量初始化:
r2
,r3
,r5
分别代表在每两人、三人、五人一组时多出的人数。
-
输入:
- 通过标准输入(
cin
)获取这三个额外人数。
- 通过标准输入(
-
循环穷举:
- 你使用了一个循环来遍历所有可能的孩子数量。这个数量是从
0
到2 * 3 * 5
,也就是从0
到30
。这个范围覆盖了所有可能的孩子数量的组合。 - 为什么选择
30
作为上限?因为2 * 3 * 5 = 30
是 2、3 和 5 的最小公倍数,这意味着任何大于或等于 30 的数都会形成与小于 30 的某个数相同的余数组合。因此,只需要检查 0 到 29 的所有数字。
- 你使用了一个循环来遍历所有可能的孩子数量。这个数量是从
-
检查条件:
if (n % 2 == r2 && n % 3 == r3 && n % 5 == r5)
这行代码检查当前的数字n
是否满足所有的余数条件。n % 2 == r2
检查n
除以 2 的余数是否等于r2
。n % 3 == r3
检查n
除以 3 的余数是否等于r3
。n % 5 == r5
检查n
除以 5 的余数是否等于r5
。
-
输出结果:
- 一旦找到满足所有条件的最小的
n
,就输出这个数字并结束程序。
- 一旦找到满足所有条件的最小的
#include<bits/stdc++.h>
#include <iostream>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
int main() {
int r2, r3, r5;
cin >> r2 >> r3 >> r5;
for (int n = 0; n < 2 * 3 * 5; ++n) {
if (n % 2 == r2 && n % 3 == r3 && n % 5 == r5) {
cout << n << endl;
return 0;
}
}
return 0;
}