從1-9中選9個數字全部選到且不能重復選取


之前做藍橋杯的題目的時候,遇到一次這種題目,在1到9中選9個數字且不能重復,一直百度也沒有找到合適的方法。今天在這里為大家編寫算法(其實和冒泡排序算法差不多,大家如果還有好的算法可以留言哦),題目是這種題目,其實后面函數就是化為怎么判斷不重復的問題。

1.問題描述:
    湊算式

          B      DEF
   A + --- + ------- = 10
          C      GHI


  這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。

  比如:
    6+8/3+952/714 就是一種解法,
    5+3/1+972/486 是另一種解法。
2.算法思路:

  這道題目剛開始看到,我是想到用for循環暴力,一想要寫9個for循環,立馬想放棄了。但其實不用這樣,只用寫5個for循環,將DEF和GHI看成一個整體,設置變量a1,a2,a3,a4,a5,然后再for循環。循環完了,再調用函數isReaped(a1,a2,a3,a4,a5),判斷是否重復,不重復輸出即可。

3.代碼如下:

public class Pchou{
    public static void main(String[] args) {
        int a1,a2,a3,a4,a5;//5個數
        int count = 0;
        for(a1=1;a1<10;a1++){
            for(a2=1;a2<10;a2++){
                for(a3=1;a3<10;a3++){
                    for(a4=100;a4<988;a4++){
                        for(a5=100;a5<988;a5++){
                            if((double)(a1*a5*a3)/(a3*a5) + (double)(a2*a5)/(a5*a3) + (double)(a4*a3)/(a5*a3) == 10 && isRepeaded(a1,a2,a3,a4,a5)){
                                System.out.printf("%d+%d/%d+%d/%d\n",a1,a2,a3,a4,a5);
                                count++;
                            }
                        }
                    }
                }
            }
        }
        System.out.println("總數為:" + count);
    }
    
    //判斷數是否重復
    public static boolean isRepeaded(int a1, int a2, int a3, int a4, int a5) {
    
        char[] charArray1 = String.valueOf(a4).toCharArray();
        char[] charArray2 = String.valueOf(a5).toCharArray();
        int b[] = new int[3];
        int c[] = new int[3];
        
        for(int i=0;i<3;i++){
            b[i] = charArray1[i] - '0';
            c[i] = charArray2[i] - '0';
        }
        //將這些數全部保存在temp中
        int temp[] = {a1,a2,a3,b[0],b[1],b[2],c[0],c[1],c[2]};
        //現在把所有的數都分離出來了,只要這幾個數不重復即可,關鍵在於怎么判斷這些數在0-9且不重復
        int flag = 0;
        for(int i=0;i<8;i++){
            for(int j=i+1;j<9;j++){
                if(temp[j] == temp[i]){
                    flag = 1;
                }
            }
        }
        if(flag ==0){
            return true;
        }else{
            return false;
        }
    }
}

  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM