题目描述
排它平方数
小明正看着 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