6174问题
1949年印度数学家D. R. Kaprekar 研究出- -种四位数的
变换:任意列出4个自然数(不能全部相同,如1111、2222),把这四个数字组成的最大四位数与最小四位数相减,得到的四个数字再用相同方式相减法(不足四位补0),几轮减下来最后得到的数字-一定是6174。来人们把这个问题称为‘6174 问题’或'Kaprekar变幻’。
比如:
5200一0025 = 5175
7551 - 1557 = 5994
9954一4599 = 5355
5553一3555=1998
9981一1899=8082
8820一0288 = 8532
8532 - 2358 = 6174 .
7641一1467 = 6174
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.stream.IntStream;
/**
* 数字黑洞6174
* 任意自然数,四位以内(不能是全部一样的,比如1111,2222)
* 把他组成最大四位数和最小四位数,不足补0,把他们向减,得到新的四位数
* 把新的四位数继续组成最大最小四位数,继续相减,依次循环,最后会得到的数字一定是 6174(这个规律也叫做kaprekar)
*/
public class demo02 {
static String jisuan(String num){
int[] x = new int[]{0,0,0,0};
String min;
String max;
String newNum;
try {
x[0]=Integer.parseInt(String.valueOf(num.charAt(0)));
x[1]=Integer.parseInt(String.valueOf(num.charAt(1)));
x[2]=Integer.parseInt(String.valueOf(num.charAt(2)));
x[3]=Integer.parseInt(String.valueOf(num.charAt(3)));
}catch (Exception e){}
//升序
Arrays.sort(x);
min = x[0]+""+x[1]+""+x[2]+""+x[3];
max = x[3]+""+x[2]+""+x[1]+""+x[0];
newNum = String.valueOf(Integer.valueOf(max) - Integer.valueOf(min)) ;
System.out.println(max +"-"+ min +"="+ newNum);
return newNum;
//Arrays.stream(x).forEach(System.out::println);
}
public static void main(String[] args) {
System.out.println("请输入四位数以内的数:");
String num = new Scanner(System.in).next();
while (true){
String newNum = jisuan(num);
if(newNum.equals("6174")){
//已经到了最后结果6174了,重复计算一遍,验算结果是不是6174
jisuan(newNum);
break;
}else {
num = newNum;
}
}
}
}
