一个自然数的数位打乱之后,重新组成一个自然数,则称这两个数为相同组合数,如果一个数的2倍数,3倍数,。。。。。6倍数都是这个数的相同组合数,我们则称这个数是神奇的数,其中自然数中最小的神奇的数就称为这个世界上最神奇的数,现在编写算法求解世界上最神奇的数。
#include<cstring>
#include<cstdio>
using namespace std;
int c1[10];
int c2[10];
int i,j;
bool flag;
void f(int a,int c[])
{
int d = a;
while(d!=0)
{
c[d%10]++;
d=d/10;
}
}
int main()
{
for(i=1;flag!=true;i++)
{
flag = false;
memset(c1,0,sizeof(c1));
f(i,c1);
for(j=2;j<7;j++)
{
int k = i*j;
memset(c2,0,sizeof(c2));
f(k,c2);
int b=0;
while(c1[b]==c2[b]&&b<10) b++;
if(b!=10)
{
flag = false;
break;
}
else flag = true;
}
if(flag == true )
{
printf("最神奇的数是 %d",i);
}
}
}