/*
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。
求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。
循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
*/
#include<iostream.h>
#include<stdio.h>
#include<string>
using namespace std;
void sort(int * p)
{ //升序排列
int temp=0;
for(int i=0;i<5;i++)
for(int j=0;j<4;j++)
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
int maxNum(int *p)
{
int maxNum=0;
for (int i=4;i>=0;i--)
{
maxNum=maxNum*10+p[i];
}
return maxNum;
}
int minNum(int *p)
{
int minNum=0;
for (int i=0;i<=4;i++)
{
minNum=minNum*10+p[i];
}
return minNum;
}
int f(int n)
{
int t[5];
for(int i=0;i<5;i++)
{
t[i]=n%10;
n=n/10;
}
cout<<endl;
sort(t);
//转为数字 最大数 最小数
//求差
n=maxNum(t)-minNum(t);
// cout<<n<<endl;
return n;
}
int jianyan(int *a,int n)
{
int i,j;
//int flag=1;
for (i=0;i<n;i++)
{
for (j=i+1;j<n;j++)
{
if (a[i]==a[j])
{
// flag=0;
return i;
//break;
}
}
}
return 0;
}
int main()
{
int n;
int jieguo[100]={0};
cin>>n;
int m=0;
while (1)
{
jieguo[m++]=n=f(n);
// printf("%d\n",m);
//共M个
if (jianyan(jieguo,m)!=0)
break;
}
//输出
printf("[");
for (int i=jianyan(jieguo,m);i<m-2;i++)
{
printf("%d,",jieguo[i]);
}
printf("%d]\n",jieguo[m-2]);
return 0;
}