已設(shè)置 rand 的種子,但輸出紅包金額相同
func?SimpleRand(count,?amount?int64)?int64?{ ???//?當(dāng)紅包剩余一個(gè) ???if?count?==?1?{ ??????return?amount ???} ???//?計(jì)算最大可調(diào)度金額 ???max?:=?amount?-?min*count ???rand.Seed(time.Now().UnixNano()) ???x?:=?rand.Int63n(max)?+?min ???return?x }
func?main()?{ ???count,?amount?:=?int64(10),?int64(100) ???for?i?:=?int64(0);?i?<?count;?i++?{ ??????x?:=?algo.SimpleRand(count,?amount*100) ??????fmt.Print(float64(x)/float64(100),?",?") ???} ???fmt.Println() }
各位小伙伴,已設(shè)置 rand 的種子,最后輸出的紅包金額相同。
輸出:32.74, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66, 54.66,?
如果設(shè)置這樣
for?i?:=?int64(0);?i?<?count;?i++?{ ???time.Sleep(10) ???x?:=?algo.SimpleRand(count,?amount*100) ???fmt.Print(float64(x)/float64(100),?",?") }
紅包金額才能跟老師的一樣。
這是程序運(yùn)行太快,時(shí)間差太小導(dǎo)致的嗎?
2019-03-19
@?PumkinPie?sleep的方法不可取啊,rand.Seed是為了改變初始隨機(jī)種子數(shù),反正程序重新啟動(dòng)時(shí)的隨機(jī)序列一樣的,只要保證每次重啟后的初始隨機(jī)種子數(shù)不一樣就行。
2019-12-19
使用這個(gè)測(cè)試用例,可以保證每個(gè)紅包的總和 等于 總金額。
2019-07-31
發(fā)現(xiàn)總金額不對(duì),老師能幫忙看下嗎?1972,2370,5531,9900,5433,857,5400,7428,7838,4710,all: 51439
2019-06-12
如果不放在main中,可以隨機(jī)數(shù)種子增加一個(gè)再加上一個(gè)隨機(jī)就好啦
2019-03-18
已解決:
程序運(yùn)行的太快,UnixNano 生成的時(shí)間都是一樣的,從而導(dǎo)致 生成 rand 數(shù)值也是一樣的。
解決辦法:
1,可以在 seed 設(shè)置完成以后 time.Sleep(1),情況會(huì)好很多。
2,在 main 函數(shù)里 設(shè)置?
讓它只運(yùn)行一次即可。