题解 | #蛇形矩阵#
蛇形矩阵
https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
//用于构造左上三角式的数组
int m = n;
//构造二维数组
int[][] a = new int[n][n];
//用于给首行元素计算其值
int count = 1;
//保存上一行的所有元素,给下一行的元素赋值
int[] temp = new int[n];
//两层构造左上三角式的数组
for (int i = 0; i < n; i++) {
int j = 0;
//每行的元素个数为m个
while (j < m) {
//首行元素赋值:求和公式
if (i == 0) {
a[i][j] = count * (count + 1) / 2;
temp[j]=a[i][j];//第一行保存到数组中
count++;
j++;
}else{
//其他行:取上一行元素减去1即可,从第2个开始取
a[i][j]=temp[j+1]-1;
temp[j]=a[i][j];//将本行元素保存,以便给下一行进行赋值
j++;
}
}
//下一行元素个数减1
m--;
}
//打印数组的非0元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] != 0) {
System.out.print(a[i][j] + " ");
}
}
System.out.println();
}
}
}
}
只会写左上三角矩阵的构造,对于数组值的构造是懵逼的,翻答案发现只有两个点能看懂,并据此写出了答案:1.首行元素符号等差数列和规律(与n有关),2.下行对应位置的元素值是上行元素去掉第一个后减一。根据i,j拼出答案的都是开天眼的神仙,数学巨魔
字节跳动成长空间 989人发布