后洗牌算法

package algo

import "math/rand"

/**
后洗牌算法:
先随机生成红包序列,再洗牌打乱。

count:  红包总数量
amount: 红包总金额,分

使用int64,单位“分”
 */

func AfterShuffle(count, amount int64) ([]int64, error) {
	moneySlice := make([]int64, 0)

	// 计算最大可调度金额
	max := amount - count * MIN_MONEY

	// 随机生成初级红包序列
	for i := int64(0); i < count; i++ {
		money, err := SimpleRand(count - i, max)
		if err != nil {
			panic(err.Error())
		}
		max = max - money
		moneySlice = append(moneySlice, money + MIN_MONEY)
	}
	// 洗牌打乱
	rand.Shuffle(len(moneySlice), func(i, j int) {
		moneySlice[i], moneySlice[j] = moneySlice[j], moneySlice[i]
	})

	return moneySlice, nil
}

最后更新于