解题思路
- 仔细观察并找规律会发现在斜率线上得数字是递增得,斜率线的条数是n,矩阵行数是n,每行的列数是n-i
- 斜率线上的数据所在的坐标行是递减得,列是递增的
- string.Join([]elems," ")的妙用,将" "放置在元素中间
知识点
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
var num int
for {
if n, _ := fmt.Scan(&num); n == 0 {
return
}
// 1. 构造矩阵
snake := make([][]int, num)
for i, _ := range snake {
snake[i] = make([]int, num-i)
}
// 2. 填充值
// 斜率线上的值(行--列++)递增
inx := 1
// 斜线数量
for i := 0; i < num; i++ { // 0 1,2,3,4
for line := i; line >= 0; line-- { // 所在行 line在递减 ,所在列在(i-line)在递增
snake[line][i-line] = inx
inx++
}
}
// 3.输出矩阵
for i, _ := range snake {
strtmp := make([]string, 0)
for _, v := range snake[i] {
strtmp = append(strtmp, strconv.Itoa(v))
}
tmp := strings.Join(strtmp, " ")
fmt.Println(tmp)
}
}
}