每次随机金额都一样! 问题是不是理解错了。

来源:6-11 红包算法-2倍均值算法设计和编码实践

325ice

2020-06-18 17:31

后面老师说了!!!问题作废


// double_average_test.go

package algo

import (
   "fmt"
   "testing"
)

func TestDoubleAverage(t *testing.T) {
   sum := int64(0)

   count, amount := int64(10), int64(100*100)
   for i := int64(0); i < count; i++ {
      x := DoubleAverage(count - i, amount) //每次人减少
      amount -= x                        //每次红包减少

      fmt.Println(x)
      sum += x
   }
   fmt.Println("--总计结束--")
   fmt.Println(sum)
}

代码

//double_average.go

package algo

import (
   "math/rand"
   "time"
)

func init() {
   rand.Seed(time.Now().UnixNano()) //这里保证启动的时候随机
}

const min = int64(1)

func DoubleAverage(count, amount int64) int64 {
   if count == 1 {
      return amount
   }

   // 计算出最大可用金额
   max := amount - min*count
   // 计算最大可用的平均值
   avg := max / count
   // 计算2倍均值
   avg2 := avg * 2 + min
   // 随机红包序列, 把二倍均值作为随机数的最大数

   x := rand.Int63n(avg2) + min
   return x
}


写回答 关注

0回答

还没有人回答问题,可以看看其他问题

3小时极简春节抢红包之Go的实战

【毕业设计】春节抢红包业务资金交易秒杀系统的架构设计和Golang实战

11898 学习 · 31 问题

查看课程

相似问题