思路
-
遍历可能的第一个数:从123到333枚举第一个数a(因为3a≤999)
-
生成三个数:第二个数为2a,第三个数为3a
-
检查数字使用情况:
-
将三个数的每一位数字提取出来
-
检查是否恰好使用了1-9的所有数字
-
检查是否没有0出现
-
检查每个数字只出现一次
-
-
输出有效组合:满足条件的三位数组合
代码实现
#include <iostream>
using namespace std;
int main() {
for (int a = 123; a <= 333; a++) {
int b = 2 * a;
int c = 3 * a;
int count[10] = {0}; // 数字0-9出现次数计数器
int tmp;
// 检查第一个数
tmp = a;
while (tmp) {
count[tmp % 10]++;
tmp /= 10;
}
// 检查第二个数
tmp = b;
while (tmp) {
count[tmp % 10]++;
tmp /= 10;
}
// 检查第三个数
tmp = c;
while (tmp) {
count[tmp % 10]++;
tmp /= 10;
}
// 验证1-9每个数字恰好出现一次且没有0
bool valid = (count[0] == 0);
for (int i = 1; i <= 9; i++) {
if (count[i] != 1) {
valid = false;
break;
}
}
if (valid) {
cout << a << " " << b << " " << c << endl;
}
}
return 0;
}
当然,答案也需要附上
192 384 576
219 438 657
273 546 819
327 654 981