打印如下矩阵,如果 n=7 则输出:
1
18 2
17 19 3
16 27 20 4
15 26 28 21 5
14 25 24 23 22 6
13 12 11 10 9 8 7
18 2
17 19 3
16 27 20 4
15 26 28 21 5
14 25 24 23 22 6
13 12 11 10 9 8 7
注意观察可知,数字增加的方向及走过的步数是有规律的:
1 | 斜下 7 步 |
2 | 向左 6 步 |
3 | 向上 5 步 |
4 | 斜下 4 步 |
5 | 向左 3 步 |
6 | 向上 2 步 |
7 | 斜下 1 步 |
所以可以设定的一个变量 direction 记录方向的变化,循环变化。
同时根据 direction 的不同,来决定每次的递增位置。
代码如下:
public class Sanjiao {
public static void main(String[] args) {
int n = 7;
int num[][] = new int[n][n];
int index = 0;//数值
int row = -1;// 行
int cel = -1;// 列
for (int i = n; i > 0; i--) {
int direction = i % 3;//方向
for (int k = i; k > 0; k--) {
// 0向左 1斜着 2向上
switch (direction ) {
case 1: {
num[++cel][++row] = ++index;
break;
}
case 2: {
num[--cel][row] = ++index;
break;
}
case 0: {
num[cel][--row] = ++index;
break;
}
}
}
}
//结果输入
for (int i = 0; i < num.length; i++) {
for (int k = 0; k < num[0].length; k++) {
if (num[i][k] != 0) {
if (num[i][k] > 9)
System.out.print(num[i][k] + " ");
else
System.out.print(num[i][k] + " ");
}
}
System.out.println();
}
}
}