微信紅包アルゴリズム-OC
2436 ワード
知っていますか?微信紅包アルゴリズム簡単な分配アルゴリズム: ランダム割り当てn回 毎回割り当てられた部分を差し引いて、ランダムに を割り当てています.分配過程において、考慮して0に分配した場合 実施形態1 問題の誘発:どのように一群の人をランダムにお金を使わせますか? の第一の方法は、どのようにすべてが不均一で、最初の数人のお金の基数はもっと大きく、すべての人が多くのお金を得る可能性が高いと感じています. どのようにもっと均一なお金ですか? は、赤いパケットのピークを設定することによって、一人当たりの平均振幅の中で上下に を打つ.はなぜ2倍の平均ですか?簡単に言えば、このゲームには刺激があり、波動があります.比較は統計解析によって得られた. 実施形態2
- (void)weChatRedEnvelopeWithTotalMoney:(CGFloat)totalMoney totalPeople:(NSInteger)totalPeople minMoney:(CGFloat)minMoney{
totalMoney = 100; //
totalPeople = 3; //
minMoney = 0.01; // 0.01
for (int i = 1; i < totalPeople; i++) {
//
NSInteger remainPeopleNum = totalPeople - (i - 1);
//
CGFloat topMoney = totalMoney - minMoney * remainPeopleNum;
//
CGFloat rNum = (arc4random_uniform(100) + 1) / 100.0;
NSLog(@" :%.2f",rNum);
CGFloat individualMoney = rNum * topMoney + minMoney;
totalMoney = totalMoney - individualMoney;
NSLog(@" %zd : %.2f , :%.2f
", i, individualMoney,
totalMoney);
}
NSLog(@" %zd : %.2f , :0
", totalPeople,totalMoney);
}
考え方の分析- (void)weChatRedEnvelopeWithTotalMoney:(CGFloat)totalMoney totalPeople:(NSInteger)totalPeople minMoney:(CGFloat)minMoney{
totalMoney = 100; //
totalPeople = 3; //
minMoney = 0.01; // 0.01
for (int i = 1; i < totalPeople; i++) {
//
NSInteger remainPeopleNum = totalPeople - (i - 1);
//
CGFloat averageMoney = (totalMoney - (remainPeopleNum) * minMoney) / (remainPeopleNum);
//
CGFloat topMoney = averageMoney * 2; // 2,
//
CGFloat rNum = (arc4random_uniform(100) + 1) / 100.0;
NSLog(@" :%.2f",rNum);
CGFloat individualMoney = rNum * topMoney + minMoney;
totalMoney = totalMoney - individualMoney;
NSLog(@" %zd : %.2f , :%.2f
", i, individualMoney,
totalMoney);
}
NSLog(@" %zd : %.2f , :0
", totalPeople,totalMoney);
}