算法學習——枚舉之完美綜合式

算法描述

要求java

  1. 各個一位數不能是1
  2. 只能填寫1~9的數字
  3. 方框裏的數字不能重複

算法思路

  1. 首先是將每一個一位數和兩位數都當作一個數,咱們能夠使用a,b,c,d,e,f六個數代替算法

  2. 設置for循環,枚舉a,b,c,d,e,f這六個數函數

    a 範圍2~9(由於是不容許各個一位數爲1)code

    b 範圍2~9(同理)blog

    c 範圍10~99for循環

    d 範圍10~99循環

    e 範圍10~99方法

    f 範圍2~9im

    這裏須要注意的是c和d的枚舉,設置的時候有些巧妙,因爲d是被除數,因此咱們優先改變的應該是c,並且,由題目咱們能夠猜想出,這裏的c和d應該是能夠整除的,因此咱們能夠將c做爲d的倍數增長static

    for(d=10;d<=99;d++)

    for(c=d;c<=99;c=c+d)

  3. 乘方函數能夠使用java中Math.pow函數

  4. 設置一個函數判斷式子是否成立,成立則返回true,不成立則返回false

  5. 設置一個函數判斷式子中的各個數是否包含0,是否重複,返回類型也是一個boolean類型

  6. 上述兩個函數返回的數值均是true則能夠判斷a,b,c,d,e,f是知足要求的數字,打印出來(或者是使用整除和取餘的方法一個個數的取出)

算法實現

int a,b,c,d,e,f;
    for(a=2;a<=9;a++){
        for(b=2;b<=9;b++){
            for(d=10;d<=99;d++){
                for(c=d;c<=99;c=c+d){
                    for(e=10;e<=99;e++){
                        for(f=2;f<=9;f++){
                            if(jisuan(a, b, c, d, e, f)){
                                if(isChongfu(a, b, c, d, e, f)){
                                    System.out.println(a+","+b+","+c+","+d+","+e+","+f);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
public static boolean jisuan(int a,int b,int c,int d,int e,int f){
    return (Math.pow(a, b) + c/d )==e*f;
}
public static boolean isChongfu(int a,int b,int c,int d,int e,int f){
    int[] flag = new int[9];
    flag[0]=a;
    flag[1]=b;
    flag[2]=c/10;
    flag[3]=c%10;
    flag[4]=d/10;
    flag[5]=d%10;
    flag[6]=e/10;
    flag[7]=e%10;
    flag[8]=f;
    for(int i=0;i<flag.length;i++){
        if(flag[i]==0){
            return false;
        }
    }
    for(int i=0;i<flag.length-1;i++){
        for(int j=i+1;j<flag.length;j++){
            if(flag[i]==flag[j]){
                return false;
            }
        }
    }
    return true;
}

結果

相關文章
相關標籤/搜索