日期:2014-05-20  浏览次数:20666 次

发两个java基础题
java教材上的两个题目,自己是菜鸟,不过感觉值得大神们讨论。
第一题:
n = 4
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
第二题:
n = 4
1 2 5 10
4 3 6 11
9 8 7 12
16 15 14 13

------解决方案--------------------
你都没说要干嘛、就丢这么点东西、谁知道啊?
------解决方案--------------------
写出代码?
------解决方案--------------------
规律好找,2个题都是 从1 开始数数,就是规律
------解决方案--------------------
真的是很基础啊,就是基本的循环,注意控制好方向就行了

Java code
public class Test {
    public static void main(String[] args) throws Throwable {
        int n = 4;
        showMatrix(n);
        System.out.println();
        showMatrix2(n);
    }

    public static void showMatrix(int n) {
        int[][] matrix = new int[n][n];
        for (int i=0,r=0,c=0,d=0; i<n*n; i++) {//循环矩阵,r代表行,c代表列,d代表方向
            if (r==0 && c==0) { //第一个元素,输出该元素后,列右移1个位置
                matrix[r][c++] = i+1; 
            } else if (d == 0) { //负对角线方向控制
                matrix[r++][c--] = i+1; //输出该元素后,行下移1个位置,列左移1个位置
                if (c < 0 || r == n) { //到达边界的时候
                    d = 1; //改变方向
                    c++; //重新整理列的位置
                    if (r == n) {//重新整理行和列的位置
                        r--;
                        c++;
                    }
                }
            } else { //正对角线方向
                matrix[r--][c++] = i+1;//输出该元素后,行上移1个位置,列右移1个位置
                if (r < 0 || c == n) { //到达边界的时候
                    d = 0; //改变方向
                    r++; //重新整理行位置
                    if (c == n) {//重新整理行和列位置
                        c--;
                        r++;
                    }
                }
            }
        }

        for (int i=0; i<matrix.length; i++) { //打印矩阵
            for (int j=0; j<matrix[i].length; j++) {
                System.out.printf("%-2d ", matrix[i][j]);
            }
            System.out.println();
        }
    }

    public static void showMatrix2(int n) { //这个方法就不解释了
        int[][] matrix = new int[n][n]; 
        for (int i=0,w=1,r=0,c=0,d=0; i<n*n; i++) { 
            if (r==0 && c==0) {
                matrix[r][c++] = i+1;
            } else if (d == 0) { //垂直方向
                matrix[r++][c] = i+1;
                if (r > w || r == n) {
                    d = 1;
                    r--;
                    c--;
                }
            } else { //水平方向
                matrix[r][c--] = i+1;
                if (c < 0) {
                    w++;
                    d = 0;
                    r = 0;
                    c = w;
                }
            }
        }

        for (int i=0; i<matrix.length; i++) {
            for (int j=0; j<matrix[i].length; j++) {
                System.out.printf("%-2d ", matrix[i][j]);
            }
            System.out.println();
        }
    }
}

------解决方案--------------------
规律谁都看的出来就是不会,看到这种题头就疼,求相关题型的解题思路
------解决方案--------------------
想不出来是练得少还是纯iq的问题?