最普通的方法,什么也没输出

P1008 [NOIP1998 普及组] 三连击

```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


|