今天通过测试来证明信下微信红包扫雷埋雷。辅助外挂软件是否存在。
--------
了解。+,。,威,,。。
可以,装,,,,。。 T+E+K188,去掉+号
埋雷扫雷。尾数控制
1
保证最佳手气者的红包金额?
红包金额 = 想要的最高金额 * 红包数量 / 1.4
举例:发一个5人红包,希望最佳手气至少拿到10块钱,那么你的红包金额就应该是10*5/1.4=36元。按照这个公式来发红包,可以保证最佳手气至少达到你的预期。
备注:1.4是怎么来的?1.410338是在拟合出来的密度函数上,5%分位点的位置。(假设微信红包最高金额的确是这么分布的,那么有95%的可能,红包最高金额会大于我们的设定值)
2
让前三名都获得两位数红包?
一分党滚出,两位数红包才暖心~那么如何保证前三名的红包金额呢?火箭君给出几乎可以满足前三名都至少达到某个金额的红包公式
5人红包
红包金额 = 前三名都至少达到的金额 * 5(五人)/ 0.45
10人红包
红包金额 = 前三名都至少达到的金额 * 10(十人)/ 1.11
【举例】
5人红包需要发 10*5/0.45 = 112 元才能几乎保证其中3个人拿到10元以上
10人红包需要发 10*10/1.11 = 91 元才能几乎保证其中3人拿到10元以上
转发分配算法:#coding=gbkimport randomimport sys#print random.randint(0, 99)#print "====", random.uniform(0, 0.99)def calRandomValue(min, max, total, num):print min, max, total, numtotal = float(total)num = int(num)min = 0.01if(num returnif num == 1:print "第%d个人拿到红包数为:%.2f" %(num, total)return
i = 1total_money = total#rtotal = (total*100 - min*num*100)/100while( i max = total_money - min*(num- i)k = int((num-i)/2)if num -i k = num -imax = max/kmonney = random.randint(int(min*100), int(max*100))monney = float(monney)/100total_money = total_money - monneyprint "第%d个人拿到红包数为:%.2f, 余额为: %.2f" %(i, monney, total_money)i += 1
print "第%d个人拿到红包数为:%.2f, 余额为: %.2f" %(i, total_money, 0.0)if __name__ == "__main__":min = sys.argv[1]max = sys.argv[2]total = sys.argv[3]num = sys.argv[4]calRandomValue(min, max, total, num)python 2.py 0.01 10 20 300.01 10 20 30第1个人拿到红包数为:1.34, 余额为: 18.66第2个人拿到红包数为:1.06, 余额为: 17.60第3个人拿到红包数为:1.08, 余额为: 16.52第4个人拿到红包数为:0.98, 余额为: 15.54第5个人拿到红包数为:0.88, 余额为: 14.66第6个人拿到红包数为:0.48, 余额为: 14.18第7个人拿到红包数为:0.26, 余额为: 13.92第8个人拿到红包数为:0.90, 余额为: 13.02第9个人拿到红包数为:0.12, 余额为: 12.90第10个人拿到红包数为:0.41, 余额为: 12.49第11个人拿到红包数为:0.43, 余额为: 12.06第12个人拿到红包数为:0.63, 余额为: 11.43第13个人拿到红包数为:0.36, 余额为: 11.07第14个人拿到红包数为:0.25, 余额为: 10.82第15个人拿到红包数为:1.38, 余额为: 9.44第16个人拿到红包数为:0.17, 余额为: 9.27第17个人拿到红包数为:0.79, 余额为: 8.48第18个人拿到红包数为:0.52, 余额为: 7.96第19个人拿到红包数为:0.44, 余额为: 7.52第20个人拿到红包数为:1.15, 余额为: 6.37第21个人拿到红包数为:0.13, 余额为: 6.24第22个人拿到红包数为:0.76, 余额为: 5.48第23个人拿到红包数为:1.32, 余额为: 4.16第24个人拿到红包数为:0.80, 余额为: 3.36第25个人拿到红包数为:0.16, 余额为: 3.20第26个人拿到红包数为:0.27, 余额为: 2.93第27个人拿到红包数为:1.82, 余额为: 1.11第28个人拿到红包数为:0.45, 余额为: 0.66第29个人拿到红包数为:0.27, 余额为: 0.39第30个人拿到红包数为:0.39, 余额为: 0.00
从工程角度来说,红包分配算法需要简单粗暴的实现。
楼上有人的算法过于复杂,第几个人领取都要面面俱到的计算,考虑因素太多,工程实现上真的没必要。
其实只需要按照如下框架即可:
1. 发红包时,按照设计的快速随机算法,将红包分好若干份。
2. 按照设计的评估算法,对得到的红包分配进行校验。
3. 如果校验不通过,如贫富差距过大,则重复随机分配。
4. 如果若干次重复,如5次,则停止重复,就按照当前分配。
5. 再有用户请求红包,直接队列化请求,再从红包序列中取出对应编号红包。
上述方案的优势是:
1. 只需“一次”计算。 随机算法选择简单粗暴的即可,系统按照校验策略对其评价,不满足则有限次重复,直到满足或次数太多为止。
2. 此后就只有读取。
后续操作完全是读取缓存,无需密集计算。
那么是不是还有更简单粗暴的方案呢?还是有的,那就是伪随机序列查表法。
百万千万级别的红包请求,如果每次都按照真随机来计算,仍然会有不小的计算压力。
索性预先计算得到若干伪随机分配方案,调用时只需要随机选择一个即可。
举例来说,有人的红包是10元分配给5人,系统预先存有多种分配方案,如1,1,2,3,3,或1,1,2,2,4,请求时随机选取一个方案即可。
当然,各种组合未必能穷尽,但是只需要让用户在有限次操作中觉得这是随机就够了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.