Java模拟抢红包算法
Java模拟抢红包算法
春节闲着无聊,来模拟一下抢红包算法。首先要确定抢红包的规则:
1:每个人都能抢到,且至少是1分钱。
2:所有的钱必须全部分完,所有人抢到的钱等于总金额。
3:每个人抢到的钱概率是相同的(不能先抢的就抢的多)。
代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
* @author wk
* @date 2020/2/4 10:03
* 规则:
*
* 1.所有人抢到金额之和等于红包金额,不能超过,也不能少于。
*
* 2.每个人至少抢到一分钱。
*
* 3.要保证所有人抢到金额的几率相等。
*/
public class LuckDraw {
/**
*红包金额(单位:元)
*/
private static double money;
/**
* 红包金额(单位:分)
*/
private static int moneyFen;
/**
* 人数
* @param args
*/
private static int peopleNum;
/**
* 存放金额
* @param args
*/
private static List<Integer> list = new ArrayList();
/**
* 产生随机数
*/
private static Random random = new Random();
/**
* 存储产生的随机数
*/
private static int num;
/**
* 获得红包金额总数和总人数
* @param args
*/
public static void main(String[] args) {
System.out.println("请输入红包金额:");
Scanner scanner = new Scanner(System.in);
money = scanner.nextDouble();
moneyFen = (int)money*100;
System.out.println("请输入抢红包总人数");
Scanner scanner1 = new Scanner(System.in);
peopleNum = scanner1.nextInt();
algor(moneyFen,peopleNum);
}
/**
* 红包算法
* @param moneyFen 单位为分的红包金额
* @param peopleNum 总人数
*/
public static void algor(int moneyFen, int peopleNum){
change(moneyFen,peopleNum);
for (int i = 0; i < list.size(); i++) {
double x= list.get(i)/100.00;
System.out.println("第"+(i+1)+"位红包金额:"+x+"元");
}
}
/**
* 利用递归产生随机金额红包
* @param moneyFen
* @param peopleNum
*/
public static void change(int moneyFen,int peopleNum){
if (peopleNum==1){
list.add(moneyFen);
return;
}
//确保红包金额大于0
num = random.nextInt(moneyFen/(peopleNum/2))+1;
list.add(num);
moneyFen = moneyFen-num;
peopleNum--;
change(moneyFen,peopleNum);
}
}
附运行效果图:
不足之处,欢迎留言指正,谢谢!!!