问题描述:
黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相等的整数,经有限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。
举个例子,3位数的黑洞数是495.
简易推倒过程:随便找个数,如297,3个位上的数从小到大和 各排一次,为279和972,相减,得693.按照上面的做法再做一次,得到594,再做一次,得到495,之后反复都得到495.
验证4位数的黑洞数为6174.
import java.util.Arrays;
public class Main {
public static int[] sort1(int num){ //求组合
int[]a = new int[4];
a[0] = num/1000; //取千分位
num = num%1000; //去千分位
a[1] = num/100; //取百分位
num = num%100; //去百分位
a[2] = num/10; //取十分位
a[3] = num%10; //取个位
Arrays.sort(a);
return a;
}
public static int result(int[]a){ //求最大最小组合即其差值
Arrays.sort(a);
int sum1 = (a[3]*1000) + (a[2]*100) + (a[1]*10) + a[0];
int sum2 = (a[0]*1000) + (a[1]*100) + (a[2]*10) + a[3];
return sum1-sum2;
}
public static void main(String[]Args){ //在a到b范围的相亲数
int times3 = 0;
int times2 = 0;
for(int i=1000 ; i<=9999 ; i++){
if(i%1111==0){
times3++;
continue;
}else{
int result1 =i;
int times=0;
do{
result1 = result(sort1(result1));//sort1()中必须是result1
times++;
}while(result1!=6174);
if(result1==6174){
times2++;
System.out.println("计算了"+times+"次,命题为真");
}else{
System.out.println("命题为假");
}
}
}
System.out.println(times2);//黑洞数是6174的数字的个数
System.out.println(times3);//输出各位相同的数字的个数
System.out.println(times2+times3);
//如果times2+times3的和是1000到9999的个数 则证明四位数的黑洞数是6174
}
}