6174问题
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
题目转自南阳理工学院:http://acm.nyist.edu.cn/JudgeOnline/problemset.php
个人代码(以下原创)
#include <stdio.h>
int recursion(int x, int count)
{
int a[4];
a[0] = x % 10;
a[1] = x / 10 % 10;
a[2] = x/ 100 % 10;
a[3] = x / 1000 % 10;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3 - i; j++ )
{
if (a[j] > a[j+1])
{
int t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
int m = (a[3]*1000 + a[2]*100 + a[1]*10 + a[0]) - (a[0]*1000 + a[1]*100 + a[2]*10 + a[3]);
if (m == x)
{
return count;
}
count ++;
x = m;
return recursion(x, count);
}
int main()
{
int n;
scanf("%d", &n);
while (n--)
{
int m;
int count = 1;
scanf("%d", &m);
count = recursion(m, count);
printf("%d\n", count);
}
return 0;
}