假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数
比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4
1 1234
4
#include
<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
using
namespace std;
int a[10];
int main(int argc, char* argv[])
{
int
t;
cin>>t;
while(t--)
{
int
n,count,m,m1,m2;
count=0;
cin>>n;
m=n;
a[0]=m/1000;
a[1]=(m-a[0]*1000)/100;
a[2]=(m-a[0]*1000-a[1]*100)/10;
a[3]=m-a[0]*1000-a[1]*100-a[2]*10;
sort(a,a+4);
m1=a[3]*1000+a[2]*100+a[1]*10+a[0];
m2=a[0]*1000+a[1]*100+a[2]*10+a[3];
m=m1-m2;
if(m==n)
{count=1;cout<<count<<endl;}
else
{
count=1;
while(n!=m)
{
n=m;
a[0]=m/1000;
a[1]=(m-a[0]*1000)/100;
a[2]=(m-a[0]*1000-a[1]*100)/10;
a[3]=m-a[0]*1000-a[1]*100-a[2]*10;
sort(a,a+4);
m1=a[3]*1000+a[2]*100+a[1]*10+a[0];
m2=a[0]*1000+a[1]*100+a[2]*10+a[3];
m=m1-m2;
count++;
}
}
cout<<count<<endl;
}
return 0;
}
原文:http://www.cnblogs.com/52Cyan/p/3684767.html