任意给一个四位数(各位数不完全相同),四个数组成一个最大数和一个最小数,他们的差又能组成一个最大数和一个最小数,--------直到某一步得到的差将会出现循环重复。写一个程序统计所有满足以上条件的四位数。(黑洞数,经过不到7步,都可以到达6174)
例如:3100 ― 0013 = 3087
8730 ― 0378 = 8352
8532 ― 2358 = 6174
7641 ― 1467 = 6174
#include "stdio.h"
int judge(int i,int j,int p,int q)
{
int a[4];
int flag=0;
int result[10000];
int count=0;
a[0]=i; a[1]=j; a[2]=p; a[3]=q;
while(!flag)
{
//sorting
for(int m=0;m<4;m++)
{
for(int n=m+1;n<4;n++)
{
if(a[m]>a[n])
{
int temp=a[m];
a[m]=a[n];
a[n]=temp;
}
}
}
int max_number=a[3]*1000+a[2]*100+a[1]*10+a[0];
int min_number=a[0]*1000+a[1]*100+a[2]*10+a[3];
int newNumber=max_number-min_number;
for(int k=0;k<count;k++)
{
if(a[k]==newNumber)
{
flag=1;
return flag;
}
}
if(flag==0)
{
result[count]=newNumber;
count++;
a[0]=newNumber/1000;
a[1]=(newNumber/100)%10;
a[2]=(newNumber/10)%10;
a[3]=newNumber%10;
}
}
return flag;
}
void main()
{
int number=0;
int i,j,p,q;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
for(p=0;p<10;p++)
{
for(q=0;q<10;q++)
{
if (i==j && j==p && p==q)
continue;
else
{
if (judge(i,j,p,q)==1){
number++;
printf("%d%d%d%d ",i,j,p,q);
}
}
}
}
}
}
printf("the total number is %d",number);
}