抢红包算法问题 swift 3.0

本文介绍了一种抢红包算法的实现思路,确保了每个参与者获得的红包金额公平合理。通过随机分配金额并限制单次获取的最大额度,实现了红包的均衡发放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抢红包算法的讨论网上也太多了,这里不讨论好坏问题.这里只是一个实现也是网上的一个思路(一个红包发出来,其实份额已经分配好了.)
问题: 第一个人抢的红包 不会超过 总钱数/总人数*2
解决: 最后跑下洗牌算法-链接

// ************** 抢红包问题 **********************
// 区间的随机值
func getRandomQuJian(startIndex:Int, endIndexIndex:Int)->Int {
    // [1 8]  这是随机1到8 之间的数
    let index = Int(arc4random_uniform(UInt32(UInt32(endIndexIndex - startIndex)))+UInt32(startIndex))
    return index
}
// 两个值得随机分
func getRandomValue(vaule:Int)->Int {
    // 异常处理
    if vaule < 2 {
        return 1
    }
    let index  = getRandomQuJian(startIndex: 1, endIndexIndex: vaule-1)
    return index
}
// 随机后存放价格的数组
var valueRandomMoney = Array<Int>()
var totalMoney = 3000 //分(钱)
var peoepleNum = 10

valueRandomMoney.removeAll()
while true {
    if peoepleNum <= 1 {
        valueRandomMoney .append(totalMoney)
        break;
    }
    // 得到一个钱数 ( 每人平均的钱数 乘以2,)
    var value = totalMoney/peoepleNum * 2

    // 假如上面得到的钱数是 600 ,下面的随机数最大就是600 最小是1 (最有可能是中间的一个值)
    var  randomValue = getRandomValue(vaule: value)

    //总数钱数减去一个 上面计算的钱数 ,总人数减去一个人 。依次循环处理,得到红包分配的金额
    totalMoney = totalMoney - randomValue
    peoepleNum -= 1
    valueRandomMoney.append(randomValue)
    print("----\(valueRandomMoney)");


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值