今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。 要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
这个题可直接通过手算求得结果!
下面我把我用的递归+回溯求解代码贴上:
1 #include<stdio.h> 2 int num[15],f=0; 3 void fun(int count) 4 { 5 if(count>6||f==1) 6 { 7 return; 8 } 9 int i,j,flag,k; 10 if((count==6)&&(f==0)) 11 { 12 for(i=1;i<=14;i++) 13 { 14 printf("%d ",num[i]); 15 } 16 printf("\n"); 17 f=1; 18 return; 19 } 20 k=3; 21 for(i=1;i<=6;i++) 22 { 23 flag=1; 24 for(j=1;j<=14;j++) 25 { 26 if(i==num[j]) 27 { 28 flag=0; 29 break; 30 } 31 } 32 if(flag==1) 33 { 34 while((k+i+1<=14)&&(num[k]!=0||num[k+i+1]!=0)) 35 { 36 k++; 37 } 38 if(k+i+1<=14) 39 { 40 num[k]=i; 41 num[k+i+1]=i; 42 fun(count+1); 43 num[k]=0; 44 num[k+i+1]=0; 45 } 46 } 47 48 } 49 } 50 int main() 51 { 52 int i,j,k; 53 num[1]=7; 54 num[9]=7; 55 num[2]=4; 56 num[7]=4; 57 fun(1); 58 return 0; 59 }
时间: 2024-10-11 01:00:39