题目如下 :
这一题除了暴力破解之外我没有想到方法,但是注意既然是要一亿以内的,那么如果数字乘以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