python发红包问题_一个关于红包的问题引发的python算法初体验
有個初學python的小伙伴,在群里問我關于實現搶紅包的算法的問題,于是就有了以下對話
這里,這位同學的思路是這樣的:
每次搶到的金額 = 隨機區間 ( 0.01, 剩余金額 )
為什么我這樣說呢?我們來舉個栗子:
假設10個人搶100元的紅包:
第一個人隨機的范圍是(0.01,100),平均是50元,假如第一個人搶到了50元,
第二個人隨機的范圍是(0.01,50),平均是25元,如果這個人搶到了25元,那往下推的話,就會發現第三個人的范圍是(0.01,25)……
越往后金額越低,我們寫段代碼來看看
我們的思路是這樣的:
剩余紅包金額為M,剩余人數為N,那么有如下公式:
每次搶到的金額 = 隨機區間 (0.01, M / N X 2)
這個公式,保證了每次隨機金額的平均值是相等的,不會因為搶紅包的先后順序而造成不公平。
舉個栗子:
假設有10個人,紅包總額100元。
100/10X2 = 20, 所以第一個人的隨機范圍是(0.01,20 ),平均可以搶到10元。
假設第一個人隨機到10元,那么剩余金額是100-10 =90 元。
90/9X2 = 20, 所以第二個人的隨機范圍同樣是(0.01,20 ),平均可以搶到10元。
假設第二個人隨機到10元,那么剩余金額是90-10 =80 元。
80/8X2 = 20, 所以第三個人的隨機范圍同樣是(0.01,20 ),平均可以搶到10元。
以此類推,每一次隨機范圍的均值是相等的。
我們來寫代碼實現一下:
大致思路如下:
先將紅包m分成n份,然后隨機n次取出紅包
這里有2個地方需要注意:
出現重復的處理辦法
盡可能的降低時間和空間的復雜度
這里就不寫代碼了,大家有興趣可以去研究下哦!
這里要說明下,微信或者QQ的紅包規則很可能就是最后一種方式,當然沒有見過代碼也說不準,大家有興趣可以找找相關資料的!
歡迎大家來和我一起研究算法,研究python,交流學習哦!
總結
以上是生活随笔為你收集整理的python发红包问题_一个关于红包的问题引发的python算法初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python2.7安装scrapy_py
- 下一篇: python卷积神经网络cnn的训练算法