二倍均值法(搶紅包案例)

2022-09-16 08:06:11 字數 908 閱讀 2906

發出乙個固定金額的紅包,由若干個人來搶,需要滿足哪些規則?

1.所有人搶到金額之和等於紅包金額,不能超過,也不能少於。

2.每個人至少搶到一分錢。

3.要保證所有人搶到金額的機率相等。

參考:程式設計師小灰——漫畫:如何實現搶紅包演算法?

剩餘紅包金額為m,剩餘人數為n,那麼有如下公式:

每次搶到的金額 = 隨機區間 (0, m / n x 2)

這個公式,保證了每次隨機金額的平均值是相等的,不會因為搶紅包的先後順序而造成不公平。

舉個栗子:

假設有10個人,紅包總額100元。100/10x2 = 20, 所以第乙個人的隨機範圍是(0,20 ),平均可以搶到10元。

假設第乙個人隨機到10元,那麼剩餘金額是100-10 = 90 元。90/9x2 = 20, 所以第二個人的隨機範圍同樣是(0,20 ),平均可以搶到10元。

假設第二個人隨機到10元,那麼剩餘金額是90-10 = 80 元。80/8x2 = 20, 所以第三個人的隨機範圍同樣是(0,20 ),平均可以搶到10元。

以此類推,每一次隨機範圍的均值是相等的。

static

void main(string

args)

");}

}//發紅包演算法,金額引數以分為單位

public

static list divideredpackage(int totalamount, int

totalpeoplenum)

amountlist.add(restamount);

return

amountlist;

}

歸納(二) 倍增

把一步一步往上爬變成一次一次向前跳,從 o n o log 的蛻變,可以解決很多問題。anc i k anc anc i k 1 k 1 就這麼一行。我的 2 級祖先就是我 2 級祖先的 2 級祖先。就憑這句話,就可以解決很多問題了。洛谷p1613跑路 小a的工作不僅繁瑣,更有苛刻的規定,要求小a每...

《ACM程式設計》 Problem M 二倍問題

題意 描述作為算術能力計畫的一部分,您的學生將獲得2至15個唯一正整數的隨機生成列表,並要求確定每個列表中有多少專案是同一列表中的其他專案的兩倍。你需要乙個程式來幫助你評分。這個程式應該能夠掃瞄列表並輸出每個列表的正確答案。例如,給出列表 1 4 3 2 9 7 18 22 你的程式應該回答3,因為...

leetcode 954 二倍數對陣列

給定乙個長度為偶數的整數陣列 arr,只有對 arr 進行重組後可以滿足 對於每個 0 i len arr 2,都有 arr 2 i 1 2 arr 2 i 時,返回 true 否則,返回 false。示例 1 輸入 arr 3,1,3,6 輸出 false 示例 2 輸入 arr 2,1,2,6 ...