关于6174这个数字的猜想是:从0到9取任意4个不全相同的数字,从大到小排列得到一个4位大数,从小到大排列得到一个4位小数,二者大减小做差,得到一个新的差值,这个值不足4位数补0,重复排列做差的操作,7次之内一定会得到6174这个数,即万物归墟归为6174
首先呢,这段程序就是为了验证一下这个猜想,6174为一个黑洞数字,共9990种数字组合,不想写程序验证一个一个算也可以,虽然结果比较多,但毕竟有限,下面的代码就是验证的过程,至于谁能够解释原因,老弟我是想不通为啥,也就注定以后的数学教材上边不能有我的名字了,下面代码直接上,欢迎喜欢研究6174的铁子一起来讨论原因
-------------------------------------------------------------------------------分 割 线-------------------------------------------------------------------------------
package com.yaofeng.demo.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.*;public class test {public static final Logger log = LoggerFactory.getLogger(test.class);public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();Set<Integer> set = new HashSet<Integer>();List<Integer> newList = new ArrayList<Integer>();for(int k = 0; ;k++){int a;int b;int c;int d;Random random = new Random();for(int i = 0; ;i++){a = random.nextInt(10);b = random.nextInt(10);c = random.nextInt(10);d = random.nextInt(10);if(!(a==b && b==c && c==d)){break;}}int[] num = {a,b,c,d};int element = num(num);for (Integer it : list) {if(set.add(it)){newList.add(it);}}list.add(element);if(newList.size() >= 9990){log.info("此时已验证过猜想成立的newList.size()="+newList.size());System.out.println("此时已验证过猜想成立的newList.size()="+newList.size());System.exit(0);}else{if(!newList.contains(element)){log.info("第newList.size()="+newList.size()+"个数字---element="+element);System.out.println("第newList.size()="+newList.size()+"个数字---element="+element);guess(num);}}}}public static int getSNum(int[] arr){int[] resD = bubbleSortD(arr);int smaNum = num(resD);return smaNum;}public static int getBNum(int[] arr){int[] resU = bubbleSortU(arr);int bigNum = num(resU);return bigNum;}public static int[] bubbleSortD(int[] arr) {for(int i = 0;i < arr.length;i++){int tem = 0;for(int j = i+1;j < arr.length;j++){if(arr[i]>arr[j]){tem = arr[j];arr[j]= arr[i];arr[i] = tem;}}}return arr;}public static int[] bubbleSortU(int[] arr) {for(int i = 0;i < arr.length;i++){int tem = 0;for(int j = i+1;j < arr.length;j++){if(arr[i]<arr[j]){tem = arr[j];arr[j]= arr[i];arr[i] = tem;}}}return arr;}public static int num(int[] arr) {String str = "";for(int i = 0;i < arr.length;i++){str += arr[i];}return Integer.parseInt(str);}public static int[] newNum(int subtraction) {String str = String.valueOf(subtraction);int[] sub = new int[4];if(str.length() == 4){for(int i = 0;i < str.length();i++){sub[i] = Integer.parseInt(String.valueOf(str.charAt(i)));}}else{for(int i = 0;i < str.length();i++){sub[i] = Integer.parseInt(String.valueOf(str.charAt(i)));}sub[3] = 0;}return sub;}public static void guess(int[] num) {for(int i = 0; ;i++){if(i >= 7){log.info(">>>>>>>>>猜想不成立<<<<<<<<<");System.out.println(">>>>>>>>>猜想不成立<<<<<<<<<");System.exit(0);}else{int smaNum = getSNum(num);int bigNum = getBNum(num);int subtraction = bigNum - smaNum;if(subtraction == 6174){log.info("猜想成立");System.out.println("猜想成立");break;}else{num = newNum(subtraction);}}}}
}
---------------------------------------------------------------------------输出日志结果---------------------------------------------------------------------------
共9990种组合全部验证完猜想都成立,只差原因了
欢迎喜欢6174的老铁来一起研究原因