当前位置: 代码迷 >> J2SE >> 发两个java基础题解决思路
  详细解决方案

发两个java基础题解决思路

热度:102   发布时间:2016-04-24 01:23:10.0
发两个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的问题?
  相关解决方案