今有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