```c
#include <stdio.h>
int main(){
int a,b,c;
for(a=123;a<=333;a++){
b=a*2;
c=a*3;
if((a/100+a/10%10+a%10+b/100+b/10%10+b%10+c/100+c/10%10+c%10==1+2+3+4+5+6+7+8+9)&&((a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==(1)*(2)*(3)*(4)*(5)*(6)*(7)*(8)*(9)))
printf("%d %d %d\n",a,b,c);
}
return 0;
}
```
by zhoujunchen @ 2023-10-06 09:10:18
@[zhoujunchen](/user/991587) @[zhoujunchen](/user/991587)
哥们你这个过了,我起初也是这么想的,但是卡到不知道如何判断各个位数的数字是否不重复,你这个思路挺厉害的
by Wind001 @ 2023-10-07 20:23:06
```cpp
//避免枚举,用分离位数算法
#include<iostream>
#include<vector>
using namespace std;
#include<string>
//分离位数函数
vector<int> disassmeble(int u)
{
vector<int>c;
while (u)
{
c.push_back(u % 10);
u /= 10;
}
return c;
}
int main()
{
vector<int>A, B, C;
int b, c;
for (int a = 123; a <= 333; a++)
{
b = 2 * a;
c = 3 * a;
A = disassmeble(a);
B = disassmeble(b);
C = disassmeble(c);
int sum = 0;
int s = 1;
for (int i = 0; i < 3; i++)
{
sum += A[i] + B[i] + C[i];
}
for (int i = 0; i < 3; i++)
{
s *= A[i] * B[i] * C[i];
}
//1+2..+9=45 9!=362880
if (sum == 45 && s == 362880)
{
cout << a << " " << b << " " << c;
cout << endl;
}
}
return 0;
}
by swuster27 @ 2024-01-31 13:44:39