日期:2014-05-20 浏览次数:20666 次
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的问题?