流量红包算法

Posted 否定之否定

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流量红包算法相关的知识,希望对你有一定的参考价值。

public class MyTest {
    /**
     * 
     * @param total 流量总数
     * @param num    人数
     * @param min    每人最小流量数
     * @param redpacket    统计数组
     */
    public static void deal(int total,int num,int min,int []redpacket){
        double max;
        int flow;
        int tempTotal;
        if(min * num>total) {System.out.print("输入数据有误");return;}
        for(int i=num;i>0;i--){
            if(i==1){
                redpacket[num-i]+=total;    
                System.out.println("第"+(num-i+1)+"个人得到"+total+"红包;  "+"剩余:"+0);
                break;
            }
            max=1.0*total/i*2;
            flow = (int)Math.round((Math.random()*max));
            flow=flow<min?min:flow;
            tempTotal=total;
            total = total - flow;
            if(total<(i-1)*min){
                flow=tempTotal-(i-1)*min;
                total = (i-1)*min;
            }
            System.out.println("第"+(num-i+1)+"个人得到"+flow+"红包;  "+"剩余:"+total);
            redpacket[num-i]+=flow;
        }
    }
    public static void main(String args[]){
        int []redpacket = new int[100];//统计数组
        int cycle=100;    //循环次数
        int total=100;    //流量总数
        int num = 5;    //人数(不要超过100)
        int min = 1;    //最小流量数
        for(int i=0;i<num;i++) redpacket[i]=0;
        for(int i=0;i<cycle;i++)
        {
            deal(total,num,min,redpacket);
        }
        for(int i=0;i<num;i++){
            System.out.println(redpacket[i]);
        }
    }
}

 

以上是关于流量红包算法的主要内容,如果未能解决你的问题,请参考以下文章

2个大厂 100亿级 超大流量 红包 架构方案

别人在抢红包,程序员在研究红包算法

微信红包的设计实践

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

微信红包算法TEST

微信红包封面小程序源码 适合流量主系列