GO语言初级学习之代码案例03
@(go语言 黑马)[GO语言]
打印等腰三角形
- 题目:通过程序打印出一个“ * ”组成的等腰三角形,具体效果代码中展示。
- 逻辑:两层循环,外层控制行,内层控制列。
- 代码如下:
package main
import "fmt"
// * 5 1 i*2+1
// *** 4 3 i*2+1
// ***** 3 5 i*2+1
// ******* 2 7
// ********* 1 9
//*********** 0 11
func main() {
for i := 0; i < 6; i++ { //最外层控制行,循环一次打印一行
for j := 0; j < 5-i; j++ { //这个循环用来打印空格,每循环一次打印一个空格
// 通过“j < 5-i”递减循环次数,因为空格数是递减的
fmt.Print(" ") //不需要换行
}
for k := 0; k < i*2+1; k++ { //*的数量是i*2+1,i从0开始循环
fmt.Print("*") //不要换行,打印完一整行后再换行
}
fmt.Println()
}
}
找出一个数组中最大的值
- 题目:找出一个数组中最大的值
- 逻辑:代码的注释中
- 代码如下:
package main
import "fmt"
func main() { //找出这个集合中的最大值
arr := [10]int{1, 2, 4, 5, 7, 3, 6, 8, 7, 5}
var max = arr[0]//等于第一个数
for i := 0; i < len(arr); i++ {
if max < arr[i] {//与每个数比较
max = arr[i]//遇到比自身大的,则赋值给自己
}
}
fmt.Println("最大的数是:", max)
//循环结束,最终输出的就是最大的数
}
数组置换
- 题目:把数组中的元素位置调换
- 逻辑:通过for循环一组一组置换,用if语句来终止for循环。
- 代码如下:
package main
import "fmt"
func main() {
arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//声明两个变量,分别作为数组的下标,从头尾开始
start := 0
end := len(arr) - 1//最后一个数的下标是长度减一
for i := 0; i < len(arr); i++ {
if start > end {//当左边的下标变成右边的时,置换完毕,跳出循环
break
}
arr[start], arr[end] = arr[end], arr[start]//用多重赋值来完成置换
//左边递加,右边递减
start++
end--
}
fmt.Println(arr)
}
福利彩票双色球
- 题目:红球和蓝球,生成一个蓝球随机数和六个红球随机数,不能相同颜色的球数字不能相同;蓝球范围是1-16,红球范围是1-33。
- 逻辑:这里面最关键的是去重。
- 代码如下:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
var red [6]int //储存6个随机数
var blue int
rand.Seed(time.Now().UnixNano())
//这是生成随机数的种子,跟随系统的时间发生改变,相同的种子生成相同的随机数
for i := 0; i < 6; i++ {
var temp = rand.Intn(33) + 1 //rand.Intn(33)是生成0到33以内的随机数,不包括33,+1就可以生成1到33的随机数(包括33)
for j := 0; j < i; j++ { //这个for循环是为了让每次生成的随机数与之前的不重复
if temp == red[j] {//若重复,则重新生成随机数
temp = rand.Intn(33) + 1
j = -1//回到循环最开始,重新与第一个数开始比较
//因为continue后执行的是j++,所以赋值为-1
continue
}
}
red[i] = temp //只要不重复,则输入到数组中
}
fmt.Println("red=", red)
blue = rand.Intn(16) + 1
fmt.Println("blue=", blue)
}