golang for经典练习 金字塔打印 示例 支持控制台输入要打印的层数

go语言中最经典的for练习程序 金字塔打印 ,这也是其他语言中学习循环和条件算法最为经典的联系题。 其核心算法是如何控制内层循环变量j 每行打印的*号数量 j<=i*2-1 和空格数量 j==1 || j == i*2-1

golang中实现实心金字塔 Solid Pyramid和空心金字塔 Hollow Pyramid 效果

go语言金字塔打印经典源码和算法

Go 复制代码
package main

import "fmt"

// 金字塔打印实例
func main() {
	// 定义金字塔的总层数 变量
	var totalLevel int
	fmt.Println("请输入要打印的金字塔的层数,最少3层")
	fmt.Scan(&totalLevel) // 从控制台获取用户输入的层数
	if totalLevel < 3 {
		fmt.Println("层数不正确,必须大于等于3, 请重新输入")
		fmt.Scan(&totalLevel)
	}
	
	// 实心金字塔 solid Pyramid
	SolidPyramid(totalLevel)

	// 空心金字塔 Hollow Pyramid
	HollowPyramid(totalLevel)
}

/*
// 实心金字塔 Solid Pyramid
		     *
		    ***
		   *****
		  *******
		 *********
		***********
*/
// 金字塔的关键是计算每层的*号和空格的个数
func SolidPyramid(totalLevel int) {
	fmt.Println("\n-------------实心金字塔 Solid Pyramid-------------------\n")
	// 金字塔打印
	// 外层循环打印层数
	for i := 1; i <= totalLevel; i++ {
		// 在打印*号前打印空格, 要打印空格的个数计算公式为:  总层数 - 当前层数i
		for k := 1; k <= totalLevel-i; k++ {
			fmt.Printf(" ")
		}
		// 内层循环打印*的个数
		// *的个数为 斐波那契数列(即 后一个是前一个+当前的和)
		// 1, 3, 5, 7, 9, 11 ... 即: 奇数
		// 分析后*的个数可由: 2 * 层数 -1 获得
		// 即这里的循环条件是 2 * i -1
		for 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("")
	}
}
相关推荐
艾莉丝努力练剑6 分钟前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
witton2 小时前
Go语言网络游戏服务器模块化编程
服务器·开发语言·游戏·golang·origin·模块化·耦合
叹一曲当时只道是寻常2 小时前
Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
前端·golang
枯萎穿心攻击2 小时前
ECS由浅入深第三节:进阶?System 的行为与复杂交互模式
开发语言·unity·c#·游戏引擎
Jerry Lau2 小时前
go go go 出发咯 - go web开发入门系列(一) helloworld
开发语言·前端·golang
nananaij2 小时前
【Python基础入门 re模块实现正则表达式操作】
开发语言·python·正则表达式
Micro麦可乐2 小时前
Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
java·开发语言·加密算法·aes加解密·rsa加解密·hash算法
天下一般2 小时前
go入门 - day1 - 环境搭建
开发语言·后端·golang
雷羿 LexChien3 小时前
C++内存泄漏排查
开发语言·c++
水果里面有苹果3 小时前
17-C#的socket通信TCP-1
开发语言·tcp/ip·c#