今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
package 第五届校内选拔javaA组;
public class 第四题 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[] = new int[15];
a[1] = 7;
a[2] = 4;
a[9] = 7;
a[7] = 4;
int visit[] = new int[8];
visit[4] = 2;
visit[7] = 2;
dfs(a,visit,3);
}
private static void dfs(int[] a, int[] visit, int num) {
// TODO Auto-generated method stub
if (num==15) {
for (int i = 1; i < a.length; i++) {
System.out.print(a[i]+" ");
}
return;
}
for (a[num] = 1; a[num] <= 6; a[num]++) {
if (a[num]==4) {
continue;
}else {
if (visit[a[num]]==0) {
visit[a[num]] = 1;
num = num + 1;
if (num==7||num==9) {
num = num + 1;
dfs(a, visit, num);
num = num - 2;
visit[a[num]]=0;
}else {
dfs(a, visit, num);
num = num - 1;
visit[a[num]] = 0;
}
}else if (visit[a[num]]==1) {
if (judge(a,num,a[num])) {
visit[a[num]]=2;
num = num + 1;
if (num==7||num==9) {
num = num + 1;
dfs(a, visit, num);
num = num - 2;
visit[a[num]]=1;
}else {
dfs(a, visit, num);
num = num -1;
visit[a[num]]=1;
}
}else {
continue;
}
}else if (visit[a[num]]==2) {
continue;
}
}
}
}
private static boolean judge(int[] a, int num, int a2) {
// TODO Auto-generated method stub
for (int i = 3; i <= num; i++) {
if ((a[i]==a2)&&(num-i-1==a2)) {
return true;
}
}
return false;
}
}