歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

使用javascript如何實(shí)現(xiàn)微信紅包算法?

發(fā)布時(shí)間:2018-05-01 23:16  回復(fù):0  查看:2926   最后回復(fù):2018-05-01 23:16  
互聯(lián)網(wǎng)時(shí)代微信紅包、微信支付、支付寶支付成了我們主要的支付手段,今天和大家分享的就是微信紅包算法。我們都知道隨機(jī)紅包,每個(gè)紅包金額是根據(jù)總金額和既定分發(fā)份數(shù)決定的,這其實(shí)就是一個(gè)隨機(jī)函數(shù),那我們用javascript 如何模擬實(shí)現(xiàn)微信搶紅包算法呢?下面本文就圍繞這個(gè)問題和大家分享一二,希望對大家 學(xué)習(xí)javascript有所幫助。
  我們假設(shè)有一個(gè)100 元的紅包,要發(fā)給 10 個(gè)人。為了保證公平,算法需要保證以下的原則:
  ·  每個(gè)人最少能搶到0.01
  ·  每個(gè)人的機(jī)會平等
  ·  所有人的金額之和等于100
  1. 簡單的隨機(jī)函數(shù)實(shí)現(xiàn)
  很多朋友的一般思路是:
  第一步:從0-100 中隨機(jī)一個(gè)數(shù),得到第一個(gè)紅包金額。
  第二步:從0- 剩余金額中隨機(jī)一個(gè)數(shù),得到第二個(gè)紅包金額。
  第三步:...
  最后一步把剩余的錢都給最后一個(gè)人。
  以此類推,得到全部的10  個(gè)紅包。但是不知道大家注意到?jīng)]有,這樣存在明顯的  不公平  。先搶的人比較有優(yōu)勢,第一個(gè)人的隨機(jī)范圍是0-100 ,有可能得到較大的金額。而最后一個(gè)人的隨機(jī)范圍就會很小,如果第一個(gè)人搶到了 90 塊錢,那么最后一個(gè)人就不可能有的到超過 10 塊錢的機(jī)會。我們用代碼模擬一下這個(gè)過程:
使用javascript如何實(shí)現(xiàn)微信紅包算法?
測試結(jié)果如下:
  細(xì)心的朋友會注意到,余額的值不正確,這是JavaScript 浮點(diǎn)數(shù)運(yùn)算的已知問題。
來源:網(wǎng)絡(luò)

您還未登錄,請先登錄

熱門帖子

最新帖子

?