有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求:两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。
如下就是一个符合要求的排列: 17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。 注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。 74****4*7*******
#include<stdio.h>
#define n 14
int a[n]={0};
//判断m之前是否存在m,如果存在,返回false;否则,返回true
bool ok(int m)
{
for(int i=0; i<m; i++)
{
if(a[i]==a[m])
return false;
}
return true;
}
void traceback(int t)
{
//当程序走到最后一层时,直接输出
if(t==n)
{
for(int i=0; i<n; i++)
{
printf("%d",a[i]);
}
printf("\n");
return;
}
//判断第t个数是否存在,如果不存在,给a[t]赋值1~7,而且a[t+i+1]的值和a[t]相等。然后判断a[t+1]
if(a[t]==0)
{
for(int i=1; i<=n/2; i++)
{
a[t]=i;
if(a[t+i+1]==0 && ok(t))
{
a[t+i+1]=i;
traceback(t+1);
a[t+i+1]=0;
}
a[t]=0;
}
}//如果存在,则直接判断a[t+1]
else
traceback(t+1);
}
int main()
{
a[0]=7,a[1]=4,a[6]=4,a[8]=7;
traceback(2);
return 0;
}