golang红包算法
生活随笔
收集整理的這篇文章主要介紹了
golang红包算法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
import ("fmt""math/rand""time"
)func main() {//初始10個(gè)紅包, 10000元錢(qián)count, amount := int64(10), int64(10000)//剩余金額remain := amount//驗(yàn)證紅包算法的總金額,最后sum應(yīng)該==amountsum := int64(0)//進(jìn)行發(fā)紅包for i := int64(0); i < count; i++ {x := DoubleAverage(count-i, remain)//金額減去remain -= x//發(fā)了多少錢(qián)sum += x//金額轉(zhuǎn)成元fmt.Println(i+1, "=", float64(x)/float64(100))}fmt.Println()fmt.Println("總和 ", sum)
}//二倍均值算法,count剩余個(gè)數(shù),amount剩余金額
func DoubleAverage(count, amount int64) int64 {//最小錢(qián)min := int64(1)if count == 1 {//返回剩余金額return amount}//計(jì)算最大可用金額,min最小是1分錢(qián),減去的min,下面會(huì)加上,避免出現(xiàn)0分錢(qián)max := amount - min*count//計(jì)算最大可用平均值avg := max / count//二倍均值基礎(chǔ)加上最小金額,防止0出現(xiàn),作為上限avg2 := 2*avg + min//隨機(jī)紅包金額序列元素,把二倍均值作為隨機(jī)的最大數(shù)rand.Seed(time.Now().UnixNano())//加min是為了避免出現(xiàn)0值,上面也減去了minx := rand.Int63n(avg2) + minreturn x
}
總結(jié)
以上是生活随笔為你收集整理的golang红包算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 协程和纤程
- 下一篇: golang逃逸分析