import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
public class RedPacket {
public static void main(String[] args)
{
// list = divideRedPacket(3,2);
getRandomMoney2(100,10);
}
public static List<Integer> divideRedPacket(Integer totalAmount, Integer totalPeopleNum)
{
List<Integer> amountList = new ArrayList<Integer>();
Integer restAmount = totalAmount;
Integer restPeopleNum = totalPeopleNum;
Random random = new Random();
for (int i= 0; i<totalPeopleNum- 1; i++){
//随机范围:[1,剩余人均金额的两倍),左闭右开
int amount = random.nextInt(restAmount / restPeopleNum * 2 - 1) + 1;//这个处理是正确的 最大值是 restAmount / restPeopleNum * 2 - 1
//System.out.println(amount);
restAmount -= amount;
restPeopleNum --;
amountList.add(amount);
}
amountList.add(restAmount);
return amountList;
}
public static void getRandomMoney2(double amount,Integer person){
BigDecimal amount1 = new BigDecimal(Double.valueOf(amount));
//计算出随机数分布值
amount1 = amount1.multiply(BigDecimal.valueOf(100));
Set set = new HashSet();
ArrayList<Integer> list = new ArrayList();
list.add(0,0);//切成9段
Random r = new Random();
for (int i=0;i<person-1;i++){//
//防止重复点
while (true){
Integer money = r.nextInt(amount1.intValue());
boolean isContain = set.contains(money);
if (isContain == false){
set.add(money);
list.add(money);
break;
}
}
}
list.add(person,amount1.intValue());
//排序
Collections.sort(list, Collections.reverseOrder());
//根据比例计算金额
BigDecimal count = new BigDecimal(0);
for(int i=0;i<list.size()-1;i++){
if (i==list.size()-2){
BigDecimal a = amount1.divide(BigDecimal.valueOf(100)).subtract(count);
System.out.println("第"+(i + 1)+"个人红包为:"+a);
count = count.add(a);
System.out.println("总金额="+count);
return;
}//最后一个人做特别处理
double gap = list.get(i) - list.get(i+1);
DecimalFormat df = new DecimalFormat("0.00");
String mon = df.format(new BigDecimal(gap/amount * (amount/100)));
count = count.add(BigDecimal.valueOf(Double.parseDouble(mon)));
System.out.println("第"+(i+1)+"个人红包为:"+mon);
}
}
}