趣味整数-黑洞数

问题描述:

黑洞数又称陷阱数,是类具有奇特转换特性的整数。任何一个数字不全相等的整数,经有限“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。

举个例子,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
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值