题目标题: 排它平方数

小明正看着 203879 这个数字发呆。

原来,203879 * 203879 = 41566646641

这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

具有这样特点的6位数还有一个,请你找出它!

再归纳一下筛选要求:

  1. 6位正整数
  2. 每个数位上的数字不同
  3. 其平方数的每个数位不含原数字的任何组成数位

答案是一个6位的正整数。

请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。

思路:用一个一维数组表示每位上的数字是否出现过、暴力枚举

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <string.h>
using namespace std;

int ismarked[10];

int checkAns(long long x) {
do {
if(ismarked[x%10]) {
return 1;
} else {
ismarked[x%10] = 1;
}
} while(x /= 10);
return 0;
}

int checkSquare(long long x) {
do {
if(ismarked[x%10]) {
return 1;
}
} while(x /= 10);
return 0;
}

int main() {
for(long long i = 123456; i <= 987654; i++) {
memset(ismarked, 0, sizeof(ismarked));
if(checkAns(i)) continue;
if(checkSquare(i*i)) continue;

cout << i << endl;
}
}
/*
Prints:
203879
639172
*/

故此题答案为639172