一个3×3的二维数组,里面初始几个位置有1-9之间随机的一个数字,例如:1 空 空
空 4 空
8 空 9现在要求打印出1-9把这9格填满的所有方案求代码

解决方案 »

  1.   

    取{ 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");
      }
    }
    }
    } }
      

  2.   

    排列组合的问题,没事就写一个玩玩吧,关键是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;
                 }
             }
            
             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;
        }
    }