題目:
一個14位的數字,由兩組1-7的數組成
要求:1與1之間有一個數,2與2之間有兩個數,以此類推
開頭兩位數字為7,4
求出這個14位數
正确結果 74151643752362
/*
題目:
一個14位的數字,由兩組1-7的數組成
要求:1與1之間有一個數,2與2之間有兩個數,以此類推
開頭兩位數字為7,4
*/
#include<stdio.h>
int Change(int i,int n[],intm[]){ // i目前需要變動的位置 n變動的數組 m取數的數組
int j;
for(;i<14;i++){
if(n[i]==0){
for(j=0;j<5;j++){
// printf("i=%d,i=%d,j=%d,m[j]=%d\n",i,n[i],j,m[j]); //友善檢視資料
if(m[j]!=0&&n[i+1+m[j]]==0&&(i+1+m[j])<14){
n[i]=m[j];
n[i+1+m[j]]=m[j];
m[j]=0;
// int len; //友善檢視資料
// for(len=0;len<14;len++){
// printf("%d ",n[len]);
// } //可以檢視結果
Change(i+1,n,m);
m[j]=n[i];
n[n[i]+1+i]=0;
n[i]=0; //恢複原狀态,進行下一步操作
}
}
if(j==5&&n[i]==0){//避免不必要的遞歸加快速度。當然可以全排列
break;
}
}
}
if(i==14)
for(i=0;i<14;i++){
printf("%d",n[i]);//輸出結果 放在外部更好
}
}
int main(){
int n[14]={7,4,0,0,0,0,4,0,7,0,0,0,0,0};
intm[5]={6,5,3,2,1};
Change(2,n,m);
return0;
}