抢红包算法的讨论网上也太多了,这里不讨论好坏问题.这里只是一个实现也是网上的一个思路(一个红包发出来,其实份额已经分配好了.)
问题: 第一个人抢的红包 不会超过 总钱数/总人数*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)");
}