你这个就算有输出似乎也会超时吧
by ssine233 @ 2023-11-27 22:15:40
时间复杂度太高了,只枚举第一个数,然后乘 2 和 3 得到第二个数和第三个数就行
by ssine233 @ 2023-11-27 22:17:26
看不懂是什么意思
AC代码如下
求关~
```cpp
#include<cstdio>
using namespace std;
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 Jacob333 @ 2024-01-16 19:19:18
@[Jacob333](/user/1222154)
帮您分析一下哈
首先,
```cpp
a=123;
```
是因为数位上的数各不相同的最小的数是123;
2.这个333是因为1000/3=333,每个三位数最多只能是333;
3.
```cpp
b=a*2;
c=a*3;
```
是因为比例是1:2:3;
4.(1)if前段“((...+6+7+8+9)”的前一小段“((a/100+a/10%10+a%10+...+c%10”是把三个三位数拆分了,如果拆分后得到的9个数字互不相同,前面的比例尺也能对上,就会满足要求,得到的结果自然和后段“1+2+3+4+5+...+9”相等;
(2)但是不是仅有1-9九个数字能组成1+2+3+...+9(45)这个数的,所以安全起见,再进行if后段的(1)*(2)*(3)*...*(9);
5.下方printf配头文件cstdio,“%d %d %d\n”为输出格式,“a,b,c”为输出对象。
@[Jacob333](/user/1222154) 有不会的题问我,支持回答全面
by yinhaomiao0174 @ 2024-02-19 18:59:42
@[yinhaomiao0174](/user/1260650) BOT
by _C_language_ @ 2024-03-11 19:28:47
只需要枚举 $i$,因为 $j=2i,k=3i$。
### Code
```cpp
#include <bits/stdc++.h>
using namespace std;
int numa, numb, numc, bucket[20];
bool intobct(int _a, int _b, int _c) {
for(int i = 1; i < 10; i++) bucket[i] = 0;
do{ bucket[_a%10] ++; } while(_a /= 10);
do{ bucket[_b%10] ++; } while(_b /= 10);
do{ bucket[_c%10] ++; } while(_c /= 10);
for(int i = 1; i < 10; i++) if(!bucket[i]) return 0;
return 1;
}
int main() {
for(numa = 111; numa < 333; numa++)
{
numb = numa * 2, numc = numa * 3;
if(intobct(numa,numb,numc))
cout << numa << " " << numb << " " << numc << endl;
}
return 0;
}
```
by wfirstzhang @ 2024-05-02 08:45:55