「java转盘概率」转盘几率怎么算
今天给各位分享java转盘概率的知识,其中也会对转盘几率怎么算进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
求java算法:根据物品的数量来确定抽奖的概率(当物品数量为0时无论如何都不可能选到)
public class Lottery {
private int m = 1000;//发放奖券的数量
private int n = 2;//奖品的数量
public boolean getLottery(){
boolean isLottery = false;
double d = (double)n/(double)m;//中奖概率
double r = Math.random();//0~1之间的随机数,包括0
if(rd){//如果随机数小于概率 那么中奖
n--;//奖品数量-1
isLottery = true;
}
m--;//奖券数量-1
return isLottery;
}
}
概率计算(转盘)
首先考虑三个数都是正数,那么小于7的可能
只有111 112 122 222
得到娃娃的概率为 (1/2)^3(1-(2/7)^3)=335/2744
再考虑只有1个负数
此负数为-1,那么正数相加至少为8,
得到的概率是3(1+2+3+4+5+6+7)/(14)^3=3/98
此负数为-2,那么正数相加至少为9,
得到的概率是3(1+2+3+4+5+6)/(14)^3=63/2744
此负数为-3,那么正数相加至少为10,
得到的概率是3(1+2+3+4+5)/(14)^3=45/2744
此负数为-4,那么正数相加至少为11,
得到的概率是3(1+2+3+4)/(14)^3=30/2744
此负数为-5,那么正数相加至少为12,
得到的概率是3(1+2+3)/(14)^3=18/2744
此负数为-6,那么正数相加至少为13,
得到的概率是3(1+2)/(14)^3=9/2744
此负数为-7,那么正数相加至少为14,
得到的概率是3(1)/(14)^3=3/2744
如果有2个或3个负数则不可能相加大于等于7
那么获得一个娃娃的概率为上面相加为
587/2744
2元可获得587/2744的机得到娃娃
至少要消费多少钱的话感觉就2元,一次得到啊,呵呵
如果说要消耗的钱的期望值是2*2744/587≈9.35元
哦,原来是这样,刚才我没理解题意思,不过我现在有事,要离开了,如果明天中午之前还没人帮你解答出来的话,我帮你解答把,实在不好意思
现在首先考虑第一个数字是7,几率是1/14
那么现在第一个数字不可能是7
再考虑三个或2个数字是负数,那么也不可能了
再考虑一个数是负数,负数在第一位和第二位,那么几率就是上面的一个负数的几率减去第一是7和前2位加是7是
几率168/2744-4/2744=164/2744
现在考虑前2为相加大于7的情况
(2+3+4+5+6+7)/14^2=378/2744
再考虑加上第3为才大于7的情况
[(5)*7+4*6+3*5+2*4+1*3]/2744=85/2744
总共几率是823/2744
所以获得娃娃的几率是823/2744
期望消耗的钱是2*2744/823=6.67元
Java中请问转盘的概率整么控制?角度这些(谢谢!)
打个比方,现在你的转盘有10种情况,分别为1-10,那么你先new一个list,长度为100,若希望1,概率为25%,则往这个list存储25个1进去,其他的类似,之后你再取list里面的值时,先用Collections.shuff这样一个方法去随机打乱list,再不放心,用Random类获取一个随机数,根据这个随机数去getlist里面的内容;
至于角度,布吉岛了
JAVA抽奖的算法
优先级规则使高等奖尽量在后期抽出
import java.util.LinkedList;
import java.util.List;
public class GetGift {
// 奖品仓库
private ListGift gifts = new LinkedListGift();
public GetGift() {
// 生成一堆奖品放进奖品仓库
// 一等奖一个优先级1,二等奖两个优先级2。。。20等奖20个优先级20
for (int i = 1; i = 20; i++) {
GiftType gt = new GiftType(i + "等奖", i, i);
for (int j = 1; j = i; j++) {
gifts.add(new Gift(i + "等奖——第" + j + "号", gt));
}
}
}
// 抽奖
public synchronized Gift getGift() {
int randomNumber = (int) (Math.random() * total());
int priority = 0;
for (Gift g : gifts) {
priority += g.getType().getPriority();
if (priority = randomNumber) {
// 从奖品库移出奖品
gifts.remove(g);
return g;
}
}
// 抽奖次数多于奖品时,没有奖品
return null;
}
/**
* @param args
*/
public static void main(String[] args) {
GetGift gg = new GetGift();
// 一共生成210个奖品,抽210次,多抽显示null
for (int i = 0; i 210; i++) {
System.out.println(gg.getGift());
}
}
// 计算总优先级,内部使用
private int total() {
int result = 0;
for (Gift g : gifts) {
result += g.getType().getPriority();
}
return result;
}
}
// 记录奖品的信息
// 如1等奖共1个,优先级为1最难抽
class GiftType {
// 名字(如1等奖)
private String name;
// 这种奖品的数量,数量越大越容易抽到
private int quantity;
// 这种奖品的优先级,最小为1,数越大越容易抽到
private int priority;
public GiftType(String name, int quantity, int priority) {
this.name = name;
this.quantity = quantity;
this.priority = priority;
}
public int getPriority() {
return priority;
}
@Override
public String toString() {
return "GiftType [name=" + name + ", quantity=" + quantity + ", priority=" + priority + "]";
}
}
// 奖品
class Gift {
// 每个奖品有唯一id,抽奖不会重复,格式为"16等奖——第8号"
private String id;
// 这个奖品的类别
private GiftType type;
public Gift(String id, GiftType type) {
this.id = id;
this.type = type;
}
public GiftType getType() {
return type;
}
@Override
public String toString() {
return "Gift [id=" + id + ", type=" + type + "]";
}
}
java转盘概率的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于转盘几率怎么算、java转盘概率的信息别忘了在本站进行查找喔。
发布于:2022-12-19,除非注明,否则均为
原创文章,转载请注明出处。