【蓝桥杯】排他平方数

排它平方数


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

    原来,203879 * 203879 = 41566646641

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

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

    再归纳一下筛选要求:
    1. 6位正整数
    2. 每个数位上的数字不同
    3. 其平方数的每个数位不含原数字的任何组成数位

暴力枚举:

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 int vis[10];
 5 
 6 int judge(long long a){
 7     while(a){
 8         if(vis[a%10]==0){
 9             vis[a%10]++;
10             a /= 10;
11         }
12         else return 0;
13     }
14     return 1;
15 }
16 int judge2(long long b){
17     while(b){
18         if(vis[b%10]!=0) return 0;
19         b /= 10;
20     }
21     return 1;
22 }
23 
24 int main() 
25 {
26     
27     for(long long i = 123456;i<=987654;i++){
28         memset(vis,0,sizeof(vis));
29         if(judge(i)&&judge2(i*i)){
30             cout<<i<<" "<<i*i<<endl;
31         }
32     }
33     
34     return 0 ;
35 }

有两个判重函数,一个是判断数i各个数位上是否有重复数字;一个是判断i*i各个数位上是否有和i各个数位上相同的数字。

for循环从123456到987654很巧妙(不是我想出来的!)

还是题做的太少啊啊

运行结果:

猜你喜欢

转载自www.cnblogs.com/Aikoin/p/10467496.html