今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
//其实就是简单的dfs,注意逻辑
#include<stdio.h> #include<string.h> int a[20],book[10]; int check() { for(int i=1;i<=14;i++) if(!a[i]) return 0; return 1; } void dfs(int step) { int i; if(step==15)//每走完一次就验证,最好不要每走一步就验证,但是也犯了这个错误导致输出了三遍正确答案 { if(check()) { for(i=1;i<=14;i++) printf("%d",a[i]); return; } } if(a[step]) //当时把这条语句放在了if(step==15)之前,逻辑错误,dfs(step+1);//若到了a[14]不等于0,则还未进行验证输出,就又开始dfs(15) for(i=1;i<=7;i++) { if(book[i]==0&&a[step]==0&&a[step+i+1]==0) { book[i]=1; a[step]=i; a[step+i+1]=i; dfs(step+1); book[i]=0; a[step+i+1]=0; a[step]=0; } } return; } int main() { memset(book,0,sizeof(book)); memset(a,0,sizeof(a)); a[1]=a[9]=7; a[7]=a[2]=4; book[7]=1; book[4]=1; dfs(1); return 0; }