问答详情
源自:6-11 红包算法-2倍均值算法设计和编码实践

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

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


// 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
}


提问者:325ice 2020-06-18 17:31

个回答