没有输出!!!最后在本地运行没有

P1008 [NOIP1998 普及组] 三连击

你这个就算有输出似乎也会超时吧
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


|