Because of the type of problem is a classic pyramid, opened a separate chapter dealing with regular triangle inverted triangle rhombus
- Case: print various types of pyramid
package main import "fmt" func main() { /* 需求:打印各种金字塔 * * * * * * * * * * * * 或者 * *** ***** ******* ********* 或者 * * * * * * * * * * 需求分析: 应该是利用变量和数学算法打印多少个空格和几个*, */ var level int fmt.Println("请输入圣诞树的层数: ") fmt.Scanf("%d",&level) //等边三角形金字塔 for i := 1 ; i <= level ; i++ { //level作为传入值,由使用者决定 /* 分析下: i = 1 , j = 0 , k = 1(* ) i = 2 , j = 1 and 0, k = 2(* ) i = 3 , j = 2 and 1 and 0 , k = 3(* ) 所以就推出,层数是外循环,空格数和*数是内循环 根据通项公式: j循环 => j < i 即可; k循环 => k = 2i - 1 */ for j := 1 ; j <= level - i ; j++ { fmt.Print(" ") } for k := 1 ; k <= i ; k++ { fmt.Print("*") fmt.Print(" ") } fmt.Println() } //紧凑型金字塔 for i := 1 ; i <= level ; i++ { /* 分析下: i = 1 , j = 0 , k = 1 i = 2 , j = 1 and 0, k = 1 and 3 i = 3 , j = 2 and 1 and 0 , k = 1 and 3 and 5 所以就推出,层数是外循环,空格数和*数是内循环 根据通项公式: j循环 => j < i 即可; k循环 => k = 2i - 1 */ for j := 1 ; j <= level - i ; j++ { fmt.Print(" ") } for k := 1 ; k <= 2 * i - 1 ; k++ { fmt.Print("*") } fmt.Println() } //中空金字塔 for i := 1 ; i <= level ; i++ { /* 分析下: 在每行打印*的时候,要考虑打印*还是空格 中空情况就是两头打*,所以分别是 k==1 和 k== 2 * i - 1打了两个* 另外最后一列不能中空,所以最后一层 k == level 需要打一串* else情况都是打空格 * * * * * * * ********* */ for j := 1 ; j <= level - i ; j++ { fmt.Print(" ") } for k := 1 ; k <= 2 * i - 1 ; k++ { if k == 1 || k == 2 * i -1 || i == level { fmt.Print("*") } else { fmt.Print(" ") } } fmt.Println() } }
- Case: Print hollow diamond
package main import "fmt" func main() { //打印空心菱形 var level int fmt.Println("请输入的层数: ") fmt.Scanf("%d",&level) for i := 1 ; i <= level ; i++ { /* 学会打印空心金字塔,就是学会打印倒三角 那么菱形就是金字塔和倒三角的拼接,利用两个for循环作用域三变量完成拼接 但是又涉及到双方有共享的一行,所以倒三角部分 level - 1 这时候为了图形规范性,必须在每层输出的时候多加一个空格否则会如下 * * * * * * * * * * * * * * * * 多加了空格之后,就变成正规菱形了。 * * * * * * * * * * * * * * * * */ for j := 1 ; j <= level - i ; j++ { fmt.Print(" ") } for k := 1 ; k <= 2 * i - 1 ; k++ { if k == 1 || k == 2 * i -1 { fmt.Print("*") } else { fmt.Print(" ") } } fmt.Println() } for i := 1 ; i <= level - 1; i++ { //这就是做拼接的时候多加一个空格保证格式对齐 fmt.Printf(" ") for k := 1 ; k <= i - 1 ; k++ { fmt.Printf(" ") } for j := 1 ; j <= 2 * (level -1 - i) + 1 ; j++ { if j == 1 || j == 2 * (level - 1 - i) + 1 { fmt.Printf("*") } else { fmt.Printf(" ") } } fmt.Println() } }
- Example: Enter a number between 1 and 999 to see is not the number of daffodils
package main import "fmt" func main() { /* 需求:求1~999之间所有的水仙花数 需求分析: 水仙花数就是三位数 xyz = x^3 + y^3 + z^3这样的有多少种 首先先要拆分三位数,因为是整数 x = xyz / 100 y = xyz % 100 / 10 */ for { var num int var x int var y int var z int fmt.Println("请输入一个三位数整数:") fmt.Scanf("%d",&num) if num > 0 && num <= 999 { x = num / 100 y = num % 100 / 10 z = num % 100 % 10 if num == x*x*x + y*y*y + z*z*z { fmt.Printf("数字%d是水仙花数\n",num) } else { fmt.Printf("数字%d不是水仙花数\n",num) } break } else { fmt.Println("您输入的不是三位数整数,请重新输入") } } fmt.Println("程序结束,感谢使用") }
- Example: Enter the three numbers to compare the size, in ascending order
package main import "fmt" func main() { var ( a int b int c int temp int ) fmt.Println("请输入三个数,用空格间隔开:\n") fmt.Scanf("%d %d %d",&a,&b,&c) if a > b { temp = a a = b b = temp } if a > c { temp = a a = c c = temp } if b > c { temp = b b = c c = temp } fmt.Printf("三个数字的从小到大顺序为:%d %d %d",a,b,c) }