數字排列
有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 的結果。
*/