數字排列

數字排列

有7對數字:兩個1,兩個2,兩個3,…兩個7,把它們排成一行。
要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。
如下就是一個符合要求的排列: 17126425374635 當然,如果把它倒過來,也是符合要求的。
請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。
注意:只填寫這個14位的整數,不能填寫任何多餘的內容,比如說明註釋等。
74****4*7*******

#include <stdio.h>
#define N 14

int a[14]={0};

void backtrack(int t)       //傳值:t爲在該位置添加的數字
{
    int i,j;

    if(t==(N/2)+1 && a[0]==7 && a[1]==4)
    {
        for(i=0;i<N;i++)
            printf("%d",a[i]);
        printf("\n");
    }

    for(i=0;i<N;i++)
    {
        if(a[i]==0 && a[i+t+1]==0 && i+t+1<N)
        {
            a[i]=t;
            a[i+t+1]=t;
            backtrack(t+1);
            a[i]=0;
            a[i+t+1]=0;
        }
    }
}

int main()
{
    backtrack(1);
    return 0;
}


/*

思路:
    定義一個數組,大小爲14,初始化爲 0 。
    回溯: 在數組第 i 個位置,依次賦值爲 t ,而在第 i+t+1 個位置,也賦值爲 t 。
        賦值的條件便是第 i 個元素的位置和第 i+t+1 個元素的位置的值爲 0 。並且 i+t+1 要小於 N 。
        賦完值之後要把數組還原。
    回溯截止條件:傳值 t 等於 (N/2)+1。
    最後輸出滿足第 0 個元素爲 7 ,並且第 1 個元素爲 4 的結果。

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