数学黑洞
Time Limit: 1000MSMemory Limit: 65536KB
问题描述
任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差是还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。
输入
输入数据有多组,每组占一行,每行包含一个4位自然数N。输入文件直到EOF为止!
输出
对每组输入,输出有2行。第一行是所有差,以空格分隔,最后一个数后也有空格;第二行是差的个数。
示例输入
1000
1500
3000
示例输出
999 8991 8082 8532 6174
5
5085 7992 7173 6354 3087 8352 6174
7
2997 7173 6354 3087 8352 6174
6
代码示例:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cnt;
void f(int n)
{
int a[5];
int i,j,t;
for(i=0; i<4; i++)
{
a[i]=n%10;
n=n/10;
}
for(i=0; i<3; i++)
{
for(j=0; j<3-i; j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
int max=0,min=0;
int d=10;
for(i=0; i<4; i++)
{
max=max*d+a[3-i];
min=min*d+a[i];
}
int poor;
poor=max-min;
if(poor==6174)
{
cnt++;
printf("%d \n",poor);
printf("%d\n",cnt);
}
else
{
printf("%d ",poor);
cnt++;
f(poor);
}
}
void main()
{
int n;
while(~scanf("%d",&n))
{
cnt=0;
f(n);
}
}