取{ 2, 3, 5, 6, 7 }所有的排列组合就可以了。填充方案:int a[] = { 2, 3, 5, 6, 7 }; int len = a.length; for (int i = 0; i < len; i++) for (int j = 0; j < len; j++) { if (j == i) continue; for (int k = 0; k < len; k++) { if (k == i || k == j) continue; for (int l = 0; l < len; l++) { if (l == i || l == j || l == k) continue; for(int m=0;m<len;m++){ if(m==i || m==j || m==k || m==l) continue; System.out.println("1,"+a[i] + "," + a[j] + "," + a[k] + ",4," + a[l]+",8,"+a[m]+",9"); } } } } }
排列组合的问题,没事就写一个玩玩吧,关键是parade方法,从一个数组中抽出n个元素进行全排列import java.io.*; import java.util.Vector;public class Game { public static void main(String[] args) { new Game().solve();
// test play // new Game().play();
// test parade // Game game = new Game(); // for (int i=1; i<game.size-1; i++) { // System.out.println("--------elements: " + (i+1) + "--------"); // game.printParadeResult(game.parade(game.all, i)); // } } int[] all = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int[] taken, remain; int size = all.length; int width = (int)Math.sqrt(size);
public void solve() { taken = new int[] {1, 4, 8, 9}; remain = new int[] {2, 3, 5, 6, 7}; int[][] matrix = new int[width][width]; matrix[0][0] = taken[0]; matrix[1][1] = taken[1]; matrix[2][0] = taken[2]; matrix[2][2] = taken[3];
printMatrix(matrix);
int[][] result = parade(remain, remain.length); printMatrixResult(matrix, result); }
public void play() { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s; int n = 0; while (true) { System.out.print("Input number of initial elements: "); s = br.readLine(); try { n = Integer.parseInt(s); if (n<0 || n>all.length) { throw new Exception("please input a number between 0 and 9."); } } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("Input error, press enter key to try again or type [go] to exit."); s = br.readLine(); if (s != null && "go".equals(s)) { break; } continue; }
int[][] matrix = init(n); printMatrix(matrix);
int[][] result = parade(remain, remain.length); printMatrixResult(matrix, result);
System.out.println("press enter key to play again or type [go] to exit."); s = br.readLine(); if (s != null && "go".equals(s)) { break; } }
int index; taken = new int[n]; remain = new int[all.length-n]; StringBuffer sb = new StringBuffer(","); for (int i=0; ; ) { index = ((int)(Math.random()*100)) % all.length; if (sb.indexOf(","+index+",") >= 0) { continue; } sb.append(index).append(","); taken[i++] = all[index]; if (i==n) { break; } }
int len = a.length;
for (int i = 0; i < len; i++)
for (int j = 0; j < len; j++) {
if (j == i)
continue;
for (int k = 0; k < len; k++) {
if (k == i || k == j)
continue;
for (int l = 0; l < len; l++) {
if (l == i || l == j || l == k)
continue;
for(int m=0;m<len;m++){
if(m==i || m==j || m==k || m==l)
continue;
System.out.println("1,"+a[i] + "," + a[j] + "," + a[k] + ",4,"
+ a[l]+",8,"+a[m]+",9");
}
}
}
} }
import java.util.Vector;public class Game {
public static void main(String[] args) {
new Game().solve();
// test play
// new Game().play();
// test parade
// Game game = new Game();
// for (int i=1; i<game.size-1; i++) {
// System.out.println("--------elements: " + (i+1) + "--------");
// game.printParadeResult(game.parade(game.all, i));
// }
} int[] all = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] taken, remain;
int size = all.length;
int width = (int)Math.sqrt(size);
public void solve() {
taken = new int[] {1, 4, 8, 9};
remain = new int[] {2, 3, 5, 6, 7};
int[][] matrix = new int[width][width];
matrix[0][0] = taken[0];
matrix[1][1] = taken[1];
matrix[2][0] = taken[2];
matrix[2][2] = taken[3];
printMatrix(matrix);
int[][] result = parade(remain, remain.length);
printMatrixResult(matrix, result);
}
public void play() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s;
int n = 0;
while (true) {
System.out.print("Input number of initial elements: ");
s = br.readLine();
try {
n = Integer.parseInt(s);
if (n<0 || n>all.length) {
throw new Exception("please input a number between 0 and 9.");
}
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println("Input error, press enter key to try again or type [go] to exit.");
s = br.readLine();
if (s != null && "go".equals(s)) {
break;
}
continue;
}
int[][] matrix = init(n);
printMatrix(matrix);
int[][] result = parade(remain, remain.length);
printMatrixResult(matrix, result);
System.out.println("press enter key to play again or type [go] to exit.");
s = br.readLine();
if (s != null && "go".equals(s)) {
break;
}
}
System.out.println("bye...");
} catch (Throwable e) {
e.printStackTrace();
}
} private int[][] init(int n) {
int[][] matrix = new int[width][width];
for (int i=0; i<width; i++) {
for (int j=0; j<width; j++) {
matrix[i][j] = 0;
}
}
int index;
taken = new int[n];
remain = new int[all.length-n];
StringBuffer sb = new StringBuffer(",");
for (int i=0; ; ) {
index = ((int)(Math.random()*100)) % all.length;
if (sb.indexOf(","+index+",") >= 0) {
continue;
}
sb.append(index).append(",");
taken[i++] = all[index];
if (i==n) {
break;
}
}
for (int i=0, k=0; i<size; i++) {
if (sb.indexOf(","+i+",") >= 0) {
matrix[i/width][i%width] = all[i];
} else {
remain[k++] = all[i];
}
}
printTaken();
printRemain(); return matrix;
}
private void printTaken() {
System.out.println("--------taken--------");
for (int i=0; i<taken.length; i++) {
System.out.print(taken[i] + " ");
}
System.out.println("");
}
private void printRemain() {
System.out.println("--------remain--------");
for (int i=0; i<remain.length; i++) {
System.out.print(remain[i] + " ");
}
System.out.println("");
}
private void printMatrix(int[][] matrix) {
System.out.println("--------init--------");
for (int i=0; i<width; i++) {
for (int j=0; j<width-1; j++) {
System.out.print((matrix[i][j]>0?matrix[i][j]+" ":"* "));
}
System.out.println((matrix[i][width-1]>0?matrix[i][width-1]+"":"*"));
}
}
private void printMatrixResult(int[][] matrix, int[][] result) {
for (int i=0, k=0; i<result.length; i++) {
System.out.println("--------result " + (i+1) + "--------");
k = 0;
for (int j=0; j<size; j++) {
if (matrix[j/width][j%width] == 0) {
System.out.print(result[i][k++] + " ");
} else {
System.out.print(matrix[j/width][j%width] + " ");
}
if ((j+1)%width == 0) {
System.out.println("");
}
}
}
}
private void printParadeResult(int[][] result) {
for (int i=0; i<result.length; i++) {
System.out.println("--------result " + (i+1) + "--------");
for (int j=0; j<result[i].length; j++) {
System.out.print(result[i][j] + ", ");
}
System.out.println(result[i][result[i].length-1] + "");
}
}
public int[][] parade(int[] src, int n) {
if (src.length < n) {
return new int[0][0];
}
if (n == 1) {
int[][] result = new int[src.length][1];
for (int i=0; i<src.length; i++) {
result[i][0] = src[i];
}
return result;
}
int[] sub = new int[src.length-1];
Vector v = new Vector();
for (int i=0; i<src.length; i++) {
for (int j=0, k=0; j<src.length; j++) {
if (src[i] != src[j]) {
sub[k++] = src[j];
}
}
int[][] tmp = parade(sub, n-1);
for (int j=0; j<tmp.length; j++) {
int[] tmp2 = new int[n];
tmp2[0] = src[i];
System.arraycopy(tmp[j], 0, tmp2, 1, tmp[j].length);
v.add(tmp2);
}
}
int[][] result = new int[v.size()][n];
System.arraycopy(v.toArray(), 0, result, 0, v.size());
return result;
}
}