go语言中最经典的for练习程序 金字塔打印 ,这也是其他语言中学习循环和条件算法最为经典的联系题。 其核心算法是如何控制内层循环变量j 每行打印的*号数量 j<=i*2-1 和空格数量 j==1 || j == i*2-1
golang中实现实心金字塔 Solid Pyramid和空心金字塔 Hollow Pyramid 效果
go语言金字塔打印经典源码和算法
package mainimport "fmt"// 金字塔打印实例
func main() {// 定义金字塔的总层数 变量var totalLevel intfmt.Println("请输入要打印的金字塔的层数,最少3层")fmt.Scan(&totalLevel) // 从控制台获取用户输入的层数if totalLevel < 3 {fmt.Println("层数不正确,必须大于等于3, 请重新输入")fmt.Scan(&totalLevel)}// 实心金字塔 solid PyramidSolidPyramid(totalLevel)// 空心金字塔 Hollow PyramidHollowPyramid(totalLevel)
}/*
// 实心金字塔 Solid Pyramid************************************
*/
// 金字塔的关键是计算每层的*号和空格的个数
func SolidPyramid(totalLevel int) {fmt.Println("\n-------------实心金字塔 Solid Pyramid-------------------\n")// 金字塔打印// 外层循环打印层数for i := 1; i <= totalLevel; i++ {// 在打印*号前打印空格, 要打印空格的个数计算公式为: 总层数 - 当前层数ifor k := 1; k <= totalLevel-i; k++ {fmt.Printf(" ")}// 内层循环打印*的个数// *的个数为 斐波那契数列(即 后一个是前一个+当前的和)// 1, 3, 5, 7, 9, 11 ... 即: 奇数// 分析后*的个数可由: 2 * 层数 -1 获得// 即这里的循环条件是 2 * i -1for j := 1; j <= 2*i-1; j++ {fmt.Printf("*")}//每层循环打印一个空额fmt.Println("")}}/*
// 空心金字塔 第一个*号和最后一个星号 2*i-1 ,还有最后一层 打印*号, 其他打印空格** ** ** ** ************
*/
func HollowPyramid(totalLevel int) {fmt.Println("\n-------------空心金字塔 Hollow Pyramid -------------------\n")// 打印空心金字塔for i := 1; i <= totalLevel; i++ {//打印空格for k := 1; k <= totalLevel-i; k++ {fmt.Printf(" ")}// 打印空心金字塔内容, 这里的关键是空心的个数// 第一个 j==1 和最后一个 2*i-1 ,打印*, 另外最后一层 i == totalLevel 打印*// 空格的个数计算公式:for j := 1; j <= 2*i-1; j++ {// 第一个*和最后一个*即2*当前层数-1, 还有最后一行打 * 其他空格if j == 1 || j == 2*i-1 || i == totalLevel {fmt.Printf("*")} else {fmt.Printf(" ")}}fmt.Println("")}
}