任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。
本题思路是把输入的整数分解出再用sort排序后再变回整数,因为是四位数,所以很好做。借助一个函数递归控制输出。
#include<iostream>
#include<algorithm>
using namespace std;
int e=1;
void solve(int x)
{int k=0,a[4]={0,0,0,0},min1,max1;while(x!=0){a[k]=x%10;k=k+1;x=x/10;}sort(a,a+4);max1=a[3]*1000+a[2]*100+a[1]*10+a[0]; min1=a[0]*1000+a[1]*100+a[2]*10+a[3];cout<<max1-min1<<" ";if(max1-min1==6174){cout<<endl;cout<<e;}else{ e=e+1;solve(max1-min1);}
}
int main()
{int h;while(cin>>h){solve(h);e=1;cout<<endl;}
}