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