流量红包算法
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]); } } }
以上是关于流量红包算法的主要内容,如果未能解决你的问题,请参考以下文章
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。