2017第八屆藍橋杯省賽Java A組--9數算式
阿新 • • 發佈:2019-01-03
標題:9數算式
觀察如下的算式:
9213 x 85674 = 789314562
左邊的乘數和被乘數正好用到了1~9的所有數字,每個1次。
而乘積恰好也是用到了1~9的所有數字,並且每個1次。
請你藉助計算機的強大計算能力,找出滿足如上要求的9數算式一共有多少個?
注意:
1. 總數目包含題目給出的那個示例。
觀察如下的算式:
9213 x 85674 = 789314562
左邊的乘數和被乘數正好用到了1~9的所有數字,每個1次。
而乘積恰好也是用到了1~9的所有數字,並且每個1次。
請你藉助計算機的強大計算能力,找出滿足如上要求的9數算式一共有多少個?
注意:
1. 總數目包含題目給出的那個示例。
2. 乘數和被乘數交換後作為同一方案來看待。
題目不難,在程式碼裡有解釋,注意審題,最後結果要除以2public class Main { static String num = ""; static int flag[] = new int[10]; static int sum = 0; public static void main(String[] args) { // TODO Auto-generated method stub fun(0,num); System.out.println(sum/2);//乘數被乘數交換視為一種方案,結果需要除以2 } static void fun(int n,String num){//將乘數被乘數1-9進行排列 if(n==9){ insert(num); return ; } for(int i=1;i<=9;i++){ if(flag[i]==0){ flag[i] = 1; fun(n+1,num+i); flag[i] = 0; } } } static void insert(String num){//將排序的數分為兩個部分,進行相乘運算 for(int i=1;i<9;i++){ String left = num.substring(0, i); String right = num.substring(i, 9); int res = Integer.parseInt(left)*Integer.parseInt(right); if(check(res,num)){ //System.out.println(left+"*"+right+"="+res);//輸出結果,便於檢查 sum++; } } } static boolean check(int res,String num){//用於判斷計算結果是否滿足1-9 int[] resFlag = new int[10]; resFlag[0] = 1; String s = String.valueOf(res); if(s.length()!=9){ return false; } for(int i=0;i<9;i++){ int n = Integer.parseInt(s.substring(i,i+1)); if(resFlag[n]==0){ resFlag[n] = 1; } else{ return false; } } return true; } }