問題描述
有7對數字:兩個1,兩個2,兩個3,...兩個7,把它們排成一行。 要求,兩個1間有1個其它數字,兩個2間有2個其它數字,以此類推,兩個7之間有7個其它數字。如下就是一個符合要求的排列: 17126425374635 當然,如果把它倒過來,也是符合要求的。 請你找出另一種符合要求的排列法,並且這個排列法是以74開頭的。 注意:只填寫這個14位的整數,不能填寫任何多余的內容,比如說明注釋等。 74****4*7*******
#include<stdio.h> #define n 7 int a[8]; int m[15]; int ok(int h) { int i; if(a[h]+h+1>14) return 0; for(i=1;i<=7;i++) { if(a[i]!=0&&i!=h) { if(a[h]+h+1==a[i]||a[h]+h+1==a[i]+i+1||a[h]==a[i]||a[h]==a[i]+i+1) return 0; } } return 1; } void compute(int h) { //printf("%d\n",h); int i; if(h==8&&a[7]==1&&a[4]==2) { for(i=1;i<=7;i++) { m[a[i]]=i; m[a[i]+i+1]=i; } for(i=1;i<=14;i++) printf("%d\t",m[i]); printf("\n"); return; } for(i=1;i<=14;i++) { a[h]=i; if(ok(h)) { compute(h+1); } a[h]=0; } } int main() { int i; for(i=0;i<=14;i++) { m[i]=0; } for(i=0;i<=7;i++) { a[i]=0; } compute(1); return 0; }
結果