方法一:二倍均值法
publicstatic listdivideredpackage(integer totalamount, integer totalpeoplenum)
amountlist.add(restamount);
return
amountlist;
}
缺陷:除了最後一次,任何一次搶到的金額都不會超過人均金額的兩倍,並不是任意的隨機
方法二: 線段分割法
實現真正的隨機
思路:①,待分割的數為n,有m個人搶紅包,可以隨機插入m-1塊板,則能將n分成m份
②,將分好組的數進行排序,取出放到list中,則能隨機分成m個紅包
publicstatic
void line_cut(int money,int
people )
}collections.sort(team);
system.out.println(team);
for (int i = 0; i < team.size(); i++)
else}}
system.out.println(result);
//驗證分割後的數是否是輸入的總金額
optionalr =result.stream().reduce(integer::sum);
system.out.println(r.get());
}
推薦閱讀
微信搶紅包演算法實現
只討論金額隨機的情況,需要滿足規則 所有人搶到金額之和要等於紅包總金額1.每個人至少搶到一分錢1.要保證所有人搶到金額的機率相等方案一 每個人點進來領,金額隨機,隨機的上限是當前剩餘的紅包金額。每次搶到的金額 隨機區間 0,剩餘紅包金額 分析 這樣做的缺陷是越早領越有優勢,因為每次搶到的金額 隨機區...
C語言實現搶紅包演算法
1 演算法背景 大家知道,微信拼手氣紅包和普通紅包兩種。普通紅包每個人搶到的金額是固定的 總額的平均數 拼手氣紅包是隨機金額 每個人搶到的是隨機的,差別可能非常大,有的人搶到的是1分,有的搶到的可能是幾元 十幾元 幾十元 目前的搶紅包演算法只能輸入兩個引數,即總金額 總人數。2 演算法要求 現要求同...
Accessibility 實現搶紅包 一
好了。不想說那麼多廢話了。直接開始吧 進入正題!我英語不好,將就看吧。配置許可權 註冊你的accessinilityservice 這一步沒什麼要說的,注意許可權和meta data的配置 配置accessibility info accessibilityeventtypes 監聽的事件。acce...