任意一个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;
}
}