程序生成随机双色球号码~golang

程序语言有很多种,任意语言都可以完成该充满希望的需求,且实现方法也有多种

这里使用 golang 完成此希望工程,只当做示例参考,下面看代码:

package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

func main() {
	getBalls()
}

func getBalls()  {
	// 定义红球数组
	var redBalls [6]int
	for i := 0; i < 6; i ++ {
		for {
			// 取随机红球
			rand.Seed(time.Now().UnixNano())
			num := rand.Intn(33) + 1
			// 判断红球是否重复
			if ifInBalls (num, redBalls) {
				redBalls[i] = num
				break
			}else {
				continue
			}
		}
	}
	// 从小到大排序
	sort.Ints(redBalls[:])

	// 定义篮球数组
	var blueBall [1]int
	// 取随机篮球
	num := rand.Intn(16) + 1
	blueBall[0] = num

	// 输出结果
	fmt.Println(redBalls, blueBall)
}

// 验证红球是否重复func
func ifInBalls(param int, list [6]int) bool {
	for _, b := range list{
		if b == param {
			return false
		}
	}
	return true
}

看下结果:

 

这里需要注意几点:

1. 业务注意点: 红球不能重复, 具体看 func ifInBalls 处理方法

2. 技术注意点: math.rand 是伪随机

伪随机生成的数字是确定的,不论在什么机器、什么时间,只要执行的随机代码一样,那么生成的随机数就一样,例如:

func main() {
   rand.Seed(2)
   for i := 0; i < 6; i++  {
      println(rand.Intn(100))
   }
}

// output
86
86
92
40
32
21

golang使用一个seed作为source来生成伪随机数字,默认seed为1,只要seed固定了,那么所有随机数就固定了...

这里有一个坑:如果seed固定,那么每次程序重启后重新生成随机数会重复上一次的随机数

既然这样就会出现红球重复问题, 那么我们可以每次使用不同的seed来启动程序,就可以保证每次启动都产生新的随机数,聪明的你肯定想到了使用时间戳:

// 取随机红球
rand.Seed(time.Now().UnixNano())

time.Now 是获取到秒  UnixNano 是毫秒

好了~今天希望工程就介绍到这里,下次继续.

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值