7對數字組合問題

問題

今有7對數字:兩個1,兩個2,兩個3,…兩個7,把它們排成一行。
要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是一個符合要求的排列:

17126425374635

當然,如果把它倒過來,也是符合要求的。

請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。

注意:只填寫這個14位的整數,不能填寫任何多餘的內容,比如說明註釋等。

思路

按照題意來說就是,將剩下的1,2,3,5,6填入到74xxxx4x7xxxxx中。
因爲這是一個有解的問題。所以每一個數字都會有其位置。通過遍歷每一個空位,來尋找合適的解。
通過深搜來尋找指定的位置,當位置不符合要求就回退到上一種情況。

代碼

public class Demo_FillNumber {

    public static void solve_1(){
        int[] arr = new int[14];    //將數放在數組中
        arr[0] = arr[8] = 7;
        arr[1] = arr[1+4+1] = 4;
        int[] Nums = {1,2,3,5,6};	//將存放的數放在一起
        assist_1(arr,Nums,0);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    //深度優先搜索(每一個assist_1都是爲t找到放在數組合適的位置)
    public static boolean assist_1(int arr[],int nums[],int t){
        if(t>= nums.length){	
            return true;
        }
        //給t找到第一個適合的位置,遞歸assist_1(t+1)。
        // 若不成功代表當前t的位置不合法,找下一個合適的位置
        for (int j = 2; j < arr.length; j++) {
            if(j+nums[t]+1 < arr.length && arr[j] == 0&& arr[j+nums[t]+1] == 0){
                arr[j] = arr[j+nums[t]+1] = nums[t];
                if(assist_1(arr,nums,t+1)){  //找到了合適的位置就返回true,返回到上一層找t對應的位置,否則就找下一個合適的位置
                    return true;
                }
                arr[j] = arr[j+nums[t]+1] = 0;//不合適,賦值爲0
            }
        }
        return false;
    }

    public static void main(String[] args) {
        solve_1();
    }
}

答案爲:74151643752362

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