为了账号安全,请及时绑定邮箱和手机立即绑定

关于红包总金额问题

https://img1.sycdn.imooc.com//5c80d90d0001b28e10120783.jpg

https://img1.sycdn.imooc.com//5c80d90e00010ce517970769.jpg

后洗牌算法产生的红包序列总额( 9990 )跟发红包的总金额(10000)不一致 , 是因为在计算最大可调度金额时减去 min * count , 导致红包金额总小于总金额  有没有大神解释一下这是为什么?

正在回答

3 回答

@misaki_rain 很认真的一位同学,实际上通过这个bug,也可以更深刻的理解最小金额的意义。除了生成序列还进一步对生成的结果做了一些验证,这些思考和验证方法可以进一步使用自动化测试来验证,实际上后洗牌算法在课程中没有编写自动化测试来验证,没有测试就有bug,也说了测试的重要性。非常感谢@misaki_rain的问题,非常棒!???

0 回复 有任何疑惑可以回复我~
#1

qq_氵_cmwyIU

aaa
2019-03-14 回复 有任何疑惑可以回复我~
#2

qq_氵_cmwyIU 回复 qq_氵_cmwyIU

aaa
2019-03-14 回复 有任何疑惑可以回复我~
#3

慕婉清5328337

确切来说,应该算是最大可调度金额的重复计算吧,?
2019-04-19 回复 有任何疑惑可以回复我~
func AfterShuffle(count,amount int64) []int64 {
   var (
      inds []int64
      remain int64
   )
   //计算最大可调度金额
   //max := amount-min*count
   
   remain = amount
   for i:=int64(0);i<count;i++{
       x := SimpleRand(count-i,remain)
       remain -=x
       inds = append(inds,x)
   }
   ....

总结以上盆友,已在"简单随机算法SimpleRand"计算了最大可调度金额,故:此处再计算max,已属画蛇添足了;
0 回复 有任何疑惑可以回复我~

在aftershuffle中 inds = append(inds, x)应该改为inds = append(inds, x + min) 总金额就一样的了  图中代码一个bug  打扰了

1 回复 有任何疑惑可以回复我~
#1

大大大大丶V

这种方式产生的数据没有1了。准确的做法应该是在after_shuffle.go计算最大可调度金额时不需要减1,因为simple_random中已经减了1
2019-03-26 回复 有任何疑惑可以回复我~
#2

慕UI8290743 回复 大大大大丶V

inds = append(inds, x + min) 就是正确的啊,不太清楚你在讲啥
2020-02-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于红包总金额问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信