数学黑洞
Time Limit: 1500MS
Memory Limit: 65536KB
Problem Description
任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。
Input
输入数据有多组,每组占一行,每行包含一个4位自然数N。输入文件直到EOF为止!
Output
对每组输入,输出有2行。第一行是所有的差,以空格分隔,最后一个数后也有空格;第二行是差的个数。
Example Input
1000 1500 3000
Example Output
999 8991 8082 8532 6174 5 5085 7992 7173 6354 3087 8352 6174 7 2997 7173 6354 3087 8352 61746
#include<stdio.h> #include<algorithm> #include<iostream> using namespace std; int main(){ int N,count,end,s; int r[4]; int max,min; while(scanf("%d",&N)!=EOF) { count=0; end=0; s=N; while(end!=6174) { r[0]=s%10;//个位 r[1]=s/10%10;//十位 r[2]=s/100%10;//百位 r[3]=s/1000;//千位 sort(r,r+4);//将个十百千位上的数字按大小进行排序,比如输入1500,排序后变成5100 max=1000*r[3]+100*r[2]+10*r[1]+r[0]; min=1000*r[0]+100*r[1]+10*r[2]+r[3]; end=max-min; count++; s=end; printf("%d ",end); } printf("\n"); printf("%d\n",count); } return 0; }