题目
编程题:输入正整数(n<30),输出1到n的蛇形矩阵。
例如
(1) n 为 10 时
1 2 6 7
3 5 8
4 9
10
(2) n 为 8 时
1 2 6 7
3 5 8
4
分析
找矩阵规律:
以左上角对角线开始计为0,记为K :
如图
- 偶数(红色)对角线从斜下向斜上走,奇数(绿色)对角线由斜上向斜下走。
- 偶数(红色)对角线的矩阵下标起始a[k][0],偶数(绿色)对角线的起始坐标a[0][k](第k条对角线)。
- 每条对角线的数量为k+1
Java实现
public static void test09(){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if (n >= 30) return;
int[][] a = new int[n/2+1][n/2+1];
int k = 0;
int s = 1;
while (s <= n) {
if (k % 2 == 0){
int m = k,r = 0;
while (m >= 0) {
a[m--][r++] = s++;
if (s > n) break;
}
}else {
int m = 0,r = k;
while (r >= 0) {
a[m++][r--] = s++;
if (s > n) break;
}
}
k++;
}
//输出
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0){
System.out.print(a[i][j]+" ");
}
}
System.out.println();
}
}