[R56C] 斜向矩阵
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:。
思路
数字按「右上 → 左下」方向的斜线依次填入,整个矩阵共有 条斜线,按从左到右的顺序编号 。若用 作为 (i, j) 所在斜线的编号,则第 条斜线的起点为:
- :起点 ,斜线在矩阵上半部分;
- :起点 ,斜线在矩阵下半部分。
从起点出发沿 方向走到边界,依次填入 即可。
复杂度:时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
let nn = n
let a = Array<Array<Int64>>(nn, { _ => Array<Int64>(nn, { _ => 0 }) })
var cnt: Int64 = 1
for (k in 0..(2 * nn - 1)) {
var i: Int64 = 0
var j: Int64 = k
if (k >= nn) {
i = k - nn + 1
j = nn - 1
}
while (i < nn && j >= 0) {
a[i][j] = cnt
cnt += 1
i += 1
j -= 1
}
}
var sb = StringBuilder()
for (i in 0..nn) {
for (j in 0..nn) {
sb.append(a[i][j])
if (j != nn - 1) {
sb.append(" ")
}
}
println(sb.toString())
sb = StringBuilder()
}
return 0
}