package algorithm;
import java.util.Arrays;
import java.util.Scanner;
/*
描述
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到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
*/
class Test {
private static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int num = sc.nextInt();
int count = 0; //计算执行次数
while (num != 6174) {
int g = num % 10;
int s = num / 10 % 10;
int b = num / 100 % 10;
int q = num / 1000;
int[] arr = {g, s, b, q};
Arrays.sort(arr);
int max = 1000 * arr[3] + 100 * arr[2] + 10 * arr[1] + arr[0];
int min = 1000 * arr[0] + 100 * arr[1] + 10 * arr[2] + arr[3];
num = max - min;
count++;
}
count++;
System.out.println(count);
}
}
假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b, 然后用a-b替换原来这个数,并且继续操作。例如,从1234出发, 依次可以得到4321-1234=3087
于 2018-05-08 08:27:28 首次发布
本文介绍了一个有趣的数学算法:通过不断重组四位数的数字并相减,直到数字进入循环。文章详细解释了算法的过程,并提供了一个Java实现的例子,帮助读者理解如何通过编程方式解决这个问题。
460





