/*发出一个固定金额的红包 我们需要满足哪些条件呢
1 所有人抢到的红包等于红包金额,不能多也不能少
2 每个人至少抢到的红包金额是1分
3 要确保每个人抢到的金额几率相等
*/
/*可能大家会想到那就用每次抢到的金额 = 随机区间(0,剩余金额)
这样首先会有一个很大的问题就是首先抢到红包的人金额很大,越往后随机的金额很小
如下代码
*/
int totlePeople = 10;
int totleAmount = 100;
for (int i = 0; i < totlePeople; i ++) {
int amount = arc4random() % totleAmount;
totleAmount -= amount;
NSLog(@"%d",amount);
}
/* 那这样我们改怎么办呢,其实也不难实现 就是把每次随机的金额上限设为人均金额的两倍
剩余红包金额为M 剩余数人数为N,那么就有如下的的公式
每次抢到的红包金额 = 随机区间 (0,M/N * 2)
代码实现下
*/
int totlePeople = 10;
int totleAmount = 100;
for (int i = 0; i < totlePeople-1; i ++) {
int amount = arc4random() % (totleAmount/(totlePeople-i)*2);
totleAmount -= amount;
NSLog(@"%d",amount);
}