1. 首页
  2. Python

一个关于红包的问题引发的python算法初体验

“u003Cdivu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F1525150472899c8c9158040″ img_width=”1280″ img_height=”852″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E有个初学 python的小伙伴,在群里问我关于实现抢红包的算法的问题,于是就有了以下对话u003Cbru003Eu003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F1525150280089633aa048aa” img_width=”1048″ img_height=”1341″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E这里,这位同学的思路是这样的:u003Cbru003Eu003Cu002Fpu003Eu003Cpu003E每次抢到的金额 = 随机区间 ( 0.01, 剩余金额 )u003Cu002Fpu003Eu003Cpu003E为什么我这样说呢?我们来举个栗子:u003Cu002Fpu003Eu003Cpu003E假设 10个人抢 100元的红包:u003Cu002Fpu003Eu003Cpu003E第一个人随机的范围是(0.01,100),平均是 50元,假如第一个人抢到了 50元,第二个人随机的范围是(0.01,50),平均是 25元,如果这个人抢到了 25元,那往下推的话,就会发现第三个人的范围是(0.01,25)……u003Cu002Fpu003Eu003Cpu003E越往后金额越低,我们写段代码来看看u003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F152515032399403d45e1d2d” img_width=”737″ img_height=”596″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F15251503424872d3a5d94f8″ img_width=”1013″ img_height=”381″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E我们的思路是这样的:u003Cbru003Eu003Cu002Fpu003Eu003Cpu003E剩余红包金额为 M,剩余人数为 N,那么有如下公式:u003Cu002Fpu003Eu003Cpu003E每次抢到的金额 = 随机区间 (0.01, M u002F N X 2)u003Cu002Fpu003Eu003Cpu003E这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺序而造成不公平。u003Cu002Fpu003Eu003Cpu003E举个栗子:u003Cu002Fpu003Eu003Cpu003E假设有 10个人,红包总额 100元。u003Cu002Fpu003Eu003Cpu003E100u002F10X2 = 20, 所以第一个人的随机范围是(0.01,20 ),平均可以抢到 10元。u003Cu002Fpu003Eu003Cpu003E假设第一个人随机到 10元,那么剩余金额是 100-10 = 90 元。u003Cu002Fpu003Eu003Cpu003E90u002F9X2 = 20, 所以第二个人的随机范围同样是(0.01,20 ),平均可以抢到 10元。u003Cu002Fpu003Eu003Cpu003E假设第二个人随机到 10元,那么剩余金额是 90-10 = 80 元。u003Cu002Fpu003Eu003Cpu003E80u002F8X2 = 20, 所以第三个人的随机范围同样是(0.01,20 ),平均可以抢到 10元。u003Cu002Fpu003Eu003Cpu003E以此类推,每一次随机范围的均值是相等的。u003Cu002Fpu003Eu003Cpu003E我们来写代码实现一下:u003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F1525150384301aa8fc4e7dc” img_width=”945″ img_height=”592″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F152515040062587905a96b6″ img_width=”527″ img_height=”652″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E大致思路如下:u003Cu002Fpu003Eu003Cpu003E先将红包 m分成 n份,然后随机 n次取出红包u003Cu002Fpu003Eu003Cpu003E这里有 2个地方需要注意:u003Cu002Fpu003Eu003Cpu003E出现重复的处理办法u003Cu002Fpu003Eu003Cpu003E尽可能的降低时间和空间的复杂度u003Cu002Fpu003Eu003Cpu003E这里就不写代码了,大家有兴趣可以去研究下哦!u003Cu002Fpu003Eu003Cpu003E这里要说明下,微信或者 QQ的红包规则很可能就是最后一种方式,当然没有见过代码也说不准,大家有兴趣可以找找相关资料的!u003Cu002Fpu003Eu003Cpu003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F1525150450440b490b54187″ img_width=”1024″ img_height=”768″ alt=”一个关于红包的问题引发的python算法初体验” inline=”0″u003Eu003Cu002Fpu003Eu003Cpu003E欢迎大家来和我一起研究算法,研究 python,交流学习哦!u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:一个关于红包的问题引发的python算法初体验

主题测试文章,只做测试使用。发布者:战鹰,转转请注明出处:http://www.cxybcw.com/13320.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code