最近在做一個(gè)類似微信紅包的 拼手氣紅包的算法實(shí)現(xiàn)。
需求:
客戶拋出一個(gè)想法 :他想在他的APP中加入類似微信紅包功能。
1.要求每個(gè)人都能領(lǐng)取紅包(不超過限定人數(shù))
2.所有領(lǐng)取到紅包的人加起來的金額一定要等于紅包的總金額
3.每個(gè)人領(lǐng)取到的紅包都是隨機(jī)的。
4.紅包數(shù)量最多為100個(gè)。最少為2個(gè)。(這是客戶的微調(diào) 希望最少2個(gè)包才能發(fā)起)
5.最低紅包金額為0.01。
算法思想:
假設(shè)紅包金額為100元,發(fā)放n個(gè)紅包,用戶為y,剩余紅包數(shù)量為x,剩余紅包總金額為g
當(dāng)y=1時(shí)(第1個(gè)用戶)
n1紅包=100隨機(jī)數(shù)范圍?
g=100-n1
x=n-1
當(dāng)y=2時(shí)(第2個(gè)用戶)
n2紅包=(g)隨機(jī)范圍
x=x-1
g=g-n2
當(dāng)y=3時(shí)(第3個(gè)用戶)
n3紅包=(g)隨機(jī)范圍
x=x-1
g=g-n3
.......
當(dāng)y=x時(shí)(最后一個(gè)紅包)
最后一個(gè)紅包金額=g