分析
红包的金额分析
第一次分配
将发的钱数分成红包的个数份,并且设置(红包的个数)个随机概率,并且在第二次随机概率产生时,要乘以 1 - (第一次的概率) 才能得到第二次概率、依次推下去,最后一个,就可以直接用 1 - (除最后一个的概率);
第二次分配
因为第一次的分法会导致第一个抢到红包的人占优势,所以会采取第二分配。第二次分配是将已得到的几个概率随机排列组合,打乱顺序,这样就会让第一个抢到红包的人失去优势
如何让几个人抢
这里我会将抢的人定义为一个类,红包的类定义为父类,抢的人定义为子类,在让钱数、红包数、抢的次数、抢到的金额数、红包金额概率为静态变量,这样就能保证其他子类能抢。
代码
//红包类代码
public class User {
public String name; // 姓名
public static double money;// 钱数
public static int num;// 个数
public static double surplus[];// 钱分成几份的值
public static double probability[]; // 几分的概率
public static int frequency;// 第几次抢到红包
public User() {
}
public void probability(int cs) {//红包的金额概率
double proability = 0;
if (cs < num) {
Random r = new Random();
if (cs == 1) {
probability[cs - 1] = r.nextDouble(); // 能抢到的发的金额的百分之几
} else {
for (int j = 0; j < cs - 1; j++) {
proability += probability[j];
}
probability[cs - 1] = (1 - proability) * r.nextDouble();
}
}else{
for (int j = 0; j < cs - 1; j++) {
proability += probability[j];
}
probability[cs - 1] = 1 - proability;
}
}
public void hair(int num, double money) {//发红包
this.num = num;
this.money = money;
probability = new double[num];
for (int i = 1; i <= num; i++) {
probability(i);
}
Arrays.sort(probability);
Random r = new Random();
int wei = r.nextInt(num - 1);
double temp;
for (int i = wei; i < num + wei; i++) {//红包概率重新排序
if (i < num) {
temp = probability[i - wei];
probability[i - wei] = probability[i];
probability[i] = temp;
} else {
for (int j = wei - 1; j >= 0; j--) {
temp = probability[wei - j];
probability[wei - j] = probability[j];
probability[j] = temp;
}
break;
}
}
}
public void strong(String name) {//抢红包
frequency++;
if (frequency == 1) {
surplus = new double[num];
}
if (num >= frequency) {
if (frequency < num) {
surplus[frequency - 1] = money * probability[frequency - 1];
} else {
for (int i = 0; i < num - 1; i++) {
surplus[num - 1] += surplus[i];
}
surplus[num - 1] = money - surplus[num - 1];
// System.out.println();
}
System.out.println(name + "抢到的钱" + surplus[frequency - 1]);
// 1 5 0.1 0.9 0.2 0.4 0.2 |0.1
} else {
System.out.println("红包已抢完");
}
}
}
//抢红包用户的类
public class Shou1 extends User{
}
//测试类
public static void main(String[] args) {
Shou1 s1 = new Shou1();
s1.hair(3, 50);
s1.strong("s2");
s1.strong("s1");
s1.strong("s3");
s1.strong("s4");
}