今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:
17126425374635
当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
暴力法如下:
public static void main(String[] args) {
int[] ints = new int[14];
for (int i = 0; i < 14; i++) {
ints[i] = 1;
}
ints[0] = 7;
ints[1] = 4;
for (ints[2] = 1; ints[2] <= 7; ints[2]++) {
if (twos(ints, ints[2], 2)) continue;
for (ints[3] = 1; ints[3] <= 7; ints[3]++) {
if (twos(ints, ints[3], 3)) continue;
for (ints[4] = 1; ints[4] <= 7; ints[4]++) {
if (twos(ints, ints[4], 4)) continue;
for (ints[5] = 1; ints[5] <= 7; ints[5]++) {
if (twos(ints, ints[5], 5)) continue;
for (ints[6] = 1; ints[6] <= 7; ints[6]++) {
if (twos(ints, ints[6], 6)) continue;
for (ints[7] = 1; ints[7] <= 7; ints[7]++) {
if (twos(ints, ints[7], 7)) continue;
for (ints[8] = 1; ints[8] <= 7; ints[8]++) {
if (twos(ints, ints[8], 8)) continue;
for (ints[9] = 1; ints[9] <= 7; ints[9]++) {
if (twos(ints, ints[9], 9)) continue;
for (ints[10] = 1; ints[10] <= 7; ints[10]++) {
if (twos(ints, ints[10], 10))
continue;
for (ints[11] = 1; ints[11] <= 7; ints[11]++) {
if (twos(ints, ints[11], 11))
continue;
for (ints[12] = 1; ints[12] <= 7; ints[12]++) {
if (twos(ints, ints[12], 12))
continue;
for (ints[13] = 1; ints[13] < 7; ints[13]++) {
if (twos(ints, ints[13], 13))
continue;
String s = "";
for (int i = 0; i < 14; i++) {
s = s + ints[i];
}
if (distance(ints)) {
System.out.println(s);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
public static boolean distance(int[] ints) {
String s = "";
for (int i = 0; i < 14; i++) {
s = s + ints[i];
}
for (int k = 1; k < 8; k++) {
int a = s.indexOf(String.valueOf(k));
int b = s.indexOf(String.valueOf(k), a + 1);
if (b - a != k + 1) {
return false;
}
}
return true;
}
public static boolean twos(int[] ints, int k, int m) {
int count = 0;
for (int i = 0; i <= m; i++) {
if (ints[i] == k) {
count++;
}
}
if (count > 2) {
return true;
}
return false;
}
最后的结果为74151643752362