6174问题

来源:互联网 发布:房地产中介软件账号 编辑:程序博客网 时间:2024/05/11 20:12
6174问题
时间限制:1000 ms | 内存限制:65535 KB
难度:2

描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入

1
1234

样例输出

4

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
int samples;//测试数据组数
int num[4];
int min = 0, max = 0, count = 0;
int result = max - min, tmp;

cin >> samples;
while (samples--)
{
cin >> tmp;
do
{
for (int i = 0; i < 4; i++)
{
num[i] = tmp % 10;
tmp /= 10;
}
sort(num, num+4);//从小到大排序
min = num[0] * 1000 + num[1] * 100 + num[2] * 10 + num[3];
max = num[3] * 1000 + num[2] * 100 + num[1] * 10 + num[0];
count ++;
//cout << max << "-" << min << "=";
tmp = result = max - min;
//cout << result << endl;
}while (result != 6174);

cout << count+1 << endl;
count = 0;
}

return 0;
}