数字排列

来源:互联网 发布:淘宝最厉害的算命 编辑:程序博客网 时间:2024/06/11 23:27
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。

74****4*7*******


利用回溯法求解,参考代码如下:

#include <stdio.h>int a[8];int place(int t);int judge();void backtrack(int t){int i;if(t==8){if(a[7]==1 && a[4]==2 && judge()){/*for(i=1;i<8;i++)printf("%3d",a[i]);printf("\n");*/int b[15]={0};for(i=1;i<8;i++){b[a[i]]=i;b[a[i]+i+1]=i;}for(i=1;i<15;i++)printf("%3d",b[i]);printf("\n");}}else{for(i=1;i<14;i++){a[t]=i;if((t+i+1<=14) && place(t))backtrack(t+1);}}}int judge(){int flag=1;int i;int b[15]={0};for(i=1;i<8;i++){b[a[i]]=i;b[a[i]+i+1]=i;}for(i=1;i<15;i++){if(b[i]==0){flag=0;break;}}return flag;}int place(int t){int i;int flag=1;for(i=1;i<t;i++){if(a[t]==a[i] || a[t]==(a[i]+i+1)){flag=0;break;}}return flag;}int main(){backtrack(1);return 0;}
答案为:

74151643752362

0 0
原创粉丝点击