* 紅包算法,給定一個紅包總金額和分紅包的人數,輸出每個人隨機搶到的紅包數量。 * 要求: * 每個人都要搶到紅包,並且金額隨機 * 每個人搶到的金額數不小於1 * 每個人搶到的金額數不超過總金額的30% * 例如總金額100,人數10,輸出【19 20 15 1 25 14 2 2 1 1】
//最少分得紅包數 private static final double min = 1; //最多分得紅包數占比 private static final double percentMax = 0.3; public void allocateMoney(double money, int peopleNum) { double minMoney = min; double maxMoney = percentMax * money; int shareMoney = 0; double sum = 0; for (int i = 0; i < peopleNum; i++) { minMoney = minMoney > money - maxMoney * (peopleNum - i - 1) ? minMoney : (money - maxMoney * (peopleNum - i - 1)); maxMoney = maxMoney < money - minMoney * (peopleNum - i - 1) ? maxMoney : (money - minMoney * (peopleNum - i - 1)); shareMoney = (int) Math.floor((maxMoney - minMoney) * Math.random() + minMoney); money = money - shareMoney; sum += shareMoney; System.out.println("第" + (i + 1) + "個人搶到:" + shareMoney + "元"); } System.out.println("要分配的紅包總額為:" + sum + "元"); }