解题思路

  • 仔细观察并找规律会发现在斜率线上得数字是递增得,斜率线的条数是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)
        }
    }
}