打印空心金字塔_Golang实现

发布时间 2023-10-30 22:07:29作者: ashet
                                                *
                                        *               *
                                *                               *
                        *                                               *
                *                                                               *
        *                                                                               *
*       *       *       *       *       *       *       *       *       *       *       *       *

需求:在控制台打印如上图所示的效果图

解题思路:

  • 首先简化问题,先打印出实心金字塔,然后可观察得知,层数与star(星号)数量保持着一定关系(奇数队列),1、3、5、7……2n-1
  • 然后,格式化打印效果,即打印制表符
  • 最后,将实心改为空心
func main() {
    // 当前行
	var i int
    // 当前star序号
	var j int
	// 金字塔层数
	var limit int
	fmt.Println("请输入金字塔的层数")
	_, _ = fmt.Scanln(&limit)
	for i = 1; i <= limit; i++ {
        // 制表符
		printTable(i, limit)
		for j = 1; j <= 2*i-1; j++ {
            // 第一行,边界,最后一行
			if j == 1 || j == 2*i-1 || i == limit {
                // star
				fmt.Printf("*\t")
			} else {
                // 空心
				fmt.Printf(" \t")
			}
		}
		fmt.Println()
	}
}

func printTable(row int, limit int) {
    // 例如一个五层的金字塔,第一行需要4个制表符,第二行需要3个制表符……
    // 规律,当前行row需要打印的制表符个数 = 金字塔层数limit - 当前行数row
	for i := 1; i <= limit-row; i++ {
		fmt.Printf("\t")
	}
}