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的问题?