神奇的數字

題目如下 :

這一題除了暴力破解之外我沒有想到方法,但是注意既然是要一億以內的,那麼如果數字乘以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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章