排他平方数(蓝桥)

来源:互联网 发布:intent传递大图片数据 编辑:程序博客网 时间:2024/05/22 06:20

题目描述

 排它平方数


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


    原来,203879 * 203879 = 41566646641


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


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


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


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


直接上代码,第一思路是用set

#include <iostream>#include <set>using namespace std;set<int> data;void pu(long long a){     while(a!=0)     {        data.insert(a%10);        a=a/10;     }}int main(){    int i,j,k,l,m,n;    long long elem;    int flag[11];    for(i=0;i<10;i++)      flag[i]=0;//表示未使用     for(i=1;i<10;i++)    {       flag[i]=1;       for(j=0;j<10;j++)       {           if(flag[j]==1) continue;           flag[j]=1;           for(k=0;k<10;k++)           {               if(flag[k]==1) continue;               flag[k]=1;               for(l=0;l<10;l++)               {                  if(flag[l]==1) continue;                  flag[l]=1;                  for(m=0;m<10;m++)                  {                     if(flag[m]==1) continue;                     flag[m]=1;                     for(n=0;n<10;n++)                     {                        if(flag[n]==1) continue;                        data.clear();                        elem=i*100000+j*10000+k*1000+l*100+m*10+n;                        elem=elem*elem;                        pu(elem);                        int size1=data.size();                        data.insert(i);                        data.insert(j);                        data.insert(k);                        data.insert(l);                        data.insert(m);                        data.insert(n);                        int size2=data.size();                        if(size1+6==size2)                        {                            cout<<"size1:"<<size1<<"  size2:"<<size2<<endl;                            cout<<i<<j<<k<<l<<m<<n<<endl<<elem<<endl;                        }                        data.clear();                     }                     flag[m]=0;                  }                  flag[l]=0;               }               flag[k]=0;           }           flag[j]=0;       }       flag[i]=0;    }     system("pause");    return 0;}

答案是 639172

0 0