我刚开始学习JAVA的数据结构,刚看了第一章,在做课后习题的时候,碰到了一道很有趣的题,题目是要求输出一个方阵:
当n=4时, 输出   1   2   6   7
               3   5   8   13
               4   9   12  14
               10  11  15  16我觉得是转化成数组可以来实现,可在做的时候找不出什么规律。
有不同想法的,欢迎交流。
谢谢!

解决方案 »

  1.   

    import java.util.Arrays;public class Test04 {
        public static void main(String[] args) {
            int[][] table = new int[4][4];
            for (int i = 0; i < table.length; ++i) {
                Arrays.fill(table[i], 0);
            }        boolean gotoTopRight = true;
            int number = 1;
            table[0][0] = number++;
            int x = 0;
            int y = 0;
            while (number <= 16) {
                int tempX;
                int tempY;
                
                if (gotoTopRight) {
                    tempX = x - 1;
                    tempY = y + 1;
                    
                    if (tempX > -1 && tempY < 4 && table[tempX][tempY] == 0) {
                        // Go far to top-right.
                        x = tempX;
                        y = tempY;
                        table[x][y] = number++;
                    } else {
                        // Go to right one step.
                        tempX = x;
                        tempY = y + 1;
                        
                        if (tempX > -1 && tempY < 4 && table[tempX][tempY] == 0) {
                            x = tempX;
                            y = tempY;
                            table[x][y] = number++;
                        }
                        
                        gotoTopRight = false;
                    }
                } else {
                    // Go far to bottom-left.
                    tempX = x + 1;
                    tempY = y - 1;
                    
                    if (tempX < 4 && tempY > -1 && table[tempX][tempY] == 0) {
                        x = tempX;
                        y = tempY;
                        table[x][y] = number++;
                    } else {
                        tempX = x + 1;
                        tempY = y;
                        
                        if (tempX < 4 && tempY > -1 && table[tempX][tempY] == 0) {
                            x = tempX;
                            y = tempY;
                            table[x][y] = number++;
                        }
                        
                        gotoTopRight = true;
                    }
                }
                
                
            }
            
            for (int i = 0; i < table.length; ++i) {
                for (int j = 0; j < table[0].length; ++j) {
                    System.out.print(table[i][j] + "\t");
                }
                System.out.println();
            }
        }
    }