神奇的数字

题目如下 :

这一题除了暴力破解之外我没有想到方法,但是注意既然是要一亿以内的,那么如果数字乘以6超过一亿了的话,就不可能是一亿以内的神奇的数字了,所以之便利到100000000/6,大约数16666666,所以代码如下:(一开始我怀疑能不能跑出来,实际上在我的i5 6200u的笔记本上五秒左右的样子就出结果了)

import java.util.Arrays;
public class Three {
    
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int resultCont = 0;
       for(int i=1;i<16666666;i++){
    	   if(handle(i)){
    		   resultCont+=1; 
    	   }
       }
       System.out.print(resultCont);;
	}
	public static boolean handle(int i){//返回参数中的数字是否是神奇的数字
		boolean result = true;
		String temp = i+"";
		char[] item = temp.toCharArray();
		Arrays.sort(item);
		for(int j=2;j<=6;j++){//从乘以2一直试到乘以6,如果全部和原数字相同返回true,否则返回false
			int t = i*j;
			temp = t+"";
			char[] item2 = temp.toCharArray();
			Arrays.sort(item2);  //将数字拆开之后排序,由于排序的时候这个函数对char类型的排序顺序和对应的整数排序相同
			//所以就不转化为数字类型的数组,直接排序
			
			if(item2.length==item.length){
				for(int k=0;k<item2.length;k++){
					if(item[k]!=item2[k]){
						result = false;
						break;
					}
				}
			}else{
				result = false;
			}
			if(!result){
				break;
			}
		}
		return result;
	}

}

答案是6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值