#include<stdio.h>
int b[12]={0}, cnt=0; // 保存各循环圈中的数避免重复,cnt为黑洞中数的个数
int next(int n) // 整数n各位数字组成的最大数与最小数的差
{
int a[5],i,j;
for (i=0;i<5;i++)
{
a[i]=n%10;
n/=10;
}
for (i=0;i<4;i++)
for (j=0;j<4-i;j++)
if (a[j]>a[j+1])
{
int t;
t=a[j]; a[j]=a[j+1]; a[j+1]=t;
}
int max=0,min=0;
for (i=0;i<5;i++)
{
min=min*10+a[i];
max=max*10+a[4-i];
}
return max-min;
}
void heidong(int n)
{
int a[20],flag=0;
a[0]=n;
int i,j,k;
for (i=1; ;i++)
{
a[i]=next(a[i-1]);
for (j=0;j<i;j++)
{
if(a[i]==a[j]) // a[j]~a[i-1]之间的数构成循环圈
{
for (k=0;k<cnt;k++) // 看当前循环圈中的数是否保存过,本质是查重
{
if(a[i]==b[k]) { flag=1; break;}
}
if (flag!=1) // 输出循环圈中的各数,同时保存到全局数组b中
{
printf("[%d",a[j]);
b[cnt++]=a[j];
for (k=j+1;k<i;k++)
{
printf(",%d",a[k]);
b[cnt++]=a[k];
}
printf("]\n");
flag=1;
}
}
}
if (flag==1) break;
}
}
int main()
{
int i;
for(i=10000;i<99999;i++)
{
if (next(i)==0) continue; // 各位数字全部相同,忽略
heidong(i);
}
return 0;
}