微信發(fā)紅包算法探究

微信發(fā)紅包,也就是把一個數(shù)隨機分成n份,n份數(shù)額的的值等于總數(shù)額。
依據(jù)以上規(guī)則。實現(xiàn)如下
1.有最小值 其它隨機分配
代碼實現(xiàn)如下:

- (NSMutableArray *)getRedFromJavaWithTotalMoney:(CGFloat)total redNumber:(NSInteger)number minMoney:(CGFloat)min
{

 if(total/number<min)
    {
        NSLog(@"最小值不合法");
        
        return nil;
    }

    float money;
    double max;
    int i=1;
    
    NSMutableArray *math = [NSMutableArray array];
    while(i<number)
    {
        
        max = total- min*(number- i);
        NSInteger k = (int)((number-i)/2);
        if (number -i <= 2)
        {
            k = number -i;
            
        }
        max = max/k;
        double val = ((double)arc4random() / 0x100000000);
       if (max<min)
         {
            NSLog(@"max小于min");
            max = min+1;
         }
        money=(int)(min*100+val*(max*100-min*100+1));
        money=(float)money/100;
        total=total-money;
        ;
        [math addObject:[NSString stringWithFormat:@"%f",money]];
//        NSLog(@"第%d人 拿到%f",i,money);
        i++;
        if(i==number)
        {
            [math addObject:[NSString stringWithFormat:@"%f",total]];
//            NSLog(@"最后 第%d人 拿到%f",i,money);
        }
    }
    

    return math;
    
}

2.有最小值和最大值
代碼實現(xiàn)如下

- (NSMutableArray *)getRedFromJavaWithTotalMoney:(CGFloat)total redNumber:(NSInteger)number minMoney:(CGFloat)min maxMoney:(CGFloat)maxMoney
{
    if (total/number>maxMoney)
    {
        NSLog(@"最大值不合法");
        
        return nil;
    }
    if(total/number<min)
    {
        NSLog(@"最小值不合法");
        
        return nil;
    }
    
    float money;
    double max;
    int i=1;
    
    NSMutableArray *math = [NSMutableArray array];
    while(i<number)
    {
        
        max = total- min*(number- i);
        CGFloat canMaxMoney = maxMoney>max?max:maxMoney;
        NSInteger k = (int)((number-i)/2);
        if (number -i <= 2)
        {
            k = number -i;

        }
        max = max/k;
        
        double val = ((double)arc4random() / 0x100000000);
        if (max<min)
        {
            NSLog(@"max小于min");
            max = min+1;
        }
        money=(int)(min*100+val*(canMaxMoney*100-min*100+1));
        money=(float)money/100;
        total=total-money;
        [math addObject:[NSString stringWithFormat:@"%f",money]];
        //        NSLog(@"第%d人 拿到%f",i,money);
        i++;
        if(i==number)
        {
            [math addObject:[NSString stringWithFormat:@"%f",total]];
            //            NSLog(@"最后 第%d人 拿到%f",i,money);
        }
    }
    
    return math;
    
}

好好學(xué)習(xí) 天天向上
不足之處 歡迎指出

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 不斷更新,有身體的,智力的,精神的等等,不論哪一種都是為了讓自己更強,更優(yōu)秀。 文中說到習(xí)慣是一種必須花費時間訓(xùn)練...
    胡鈞閱讀 230評論 0 0
  • 我理解的手賬無非就是記錄一天內(nèi)發(fā)生的事情及對此產(chǎn)生的想法。開心的傷感的,全部都可以畫下來,加上文字的描述,就可以完...
    一只天蝎座小仙女閱讀 660評論 0 3
  • 前幾天有一個朋友問我如何找到淘寶商家內(nèi)部的優(yōu)惠券,這樣茫然的去找也是挺麻煩的,我告訴他我直接下載一個白菜優(yōu)惠券ap...
    菜菜ava閱讀 516評論 0 0
  • 終于忙碌已經(jīng)告一段落,回家。
    微_風(fēng)起閱讀 151評論 0 0

友情鏈接更多精彩內(nèi)容