微信红包算法 - OC

2016-07-29  本文已影响356人  dymost

知乎-微信红包算法

- (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 元\n", i, individualMoney,
              totalMoney);
    }
    NSLog(@"第 %zd 个红包: %.2f 元,剩下:0 元\n", 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 元\n", i, individualMoney,
              totalMoney);
    }
    NSLog(@"第 %zd 个红包: %.2f 元,剩下:0 元\n", totalPeople,totalMoney);
    
}
上一篇 下一篇

猜你喜欢

热点阅读