二倍均值法,随机拼运气算法
t-jian 时间:2022-02-25
优势在于不需要先把每个人得多少算出来,只有拆红包的时候才会算出这个人得多少。
同时保证了每个人拼手气得到的平均值相同
设有10个人,红包总额100元。
100/10X2 = 20, 所以第一个人的随机范围是(0,20 ),平均可以抢到10元。
假设第一个人随机到10元,那么剩余金额是100-10 = 90 元。
90/9X2 = 20, 所以第二个人的随机范围同样是(0,20 ),平均可以抢到10元。以此类推,每一次随机范围的均值是相等的。
publicstaticvoidMain(string[]args) { intremainNum=10; intremainMoney=100; for(inti=0;i<10;i++) { intt=GetRandomMoney(refremainNum,refremainMoney); Console.WriteLine($"第{i}领取:{t}分"); } } publicstaticintGetRandomMoney(refintremainNum,refintremainMoney) { if(remainNum==1) { remainNum--; returnremainMoney; } Randomrandom=newRandom(); //最小值,确保不会出现0 intmin=1; //剩余份额的二倍最大值 intmax=remainMoney/remainNum*2; //随机产生 intmoney=random.Next(0,max); money=money<min?min:money; remainNum--; remainMoney-=money; returnmoney; }
特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。