随机抽奖中将的算法,哪位大神可以提供吗

[复制链接]
查看11 | 回复9 | 2021-1-27 06:48:26 | 显示全部楼层 |阅读模式
我本意是:有6个奖项和一个谢谢,
1没中奖谢谢参与中将名额:无限额
2五等奖:10元代金券中奖名额:500名
3四等奖:水动力套装中奖名额:300名
4三等奖:鱼子蛋白套装.。中奖名额:100名
5二等奖:二等奖-电热水壶中奖名额:50名
6一等奖:时尚手机中奖名额:20名
7特等奖:深圳亲海两日游中奖名额:10名特等奖概率是1/50000
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
其他奖项的概率是按特等奖的倍数算还是你自己定的,自己定的话将所有奖项的中奖概率列出来,程序其实很简单的
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
兄弟,没中奖的中将名额是无限的,也就是正无穷,然后特等奖概率是1/50000,你觉得这逻辑上说得通吗
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
引用2楼weixin_42129373的回复:兄弟,没中奖的中将名额是无限的,也就是正无穷,然后特等奖概率是1/50000,你觉得这逻辑上说得通吗
为什么说不通?抽奖是活动,活动不结束就一直可以抽奖,但不代表奖项没有发完。也就是在最后一个奖项发完之后,抽奖的永远都是谢谢参与

@wuhuayangs
简单点的方案,建立一个50W长度的数组然后将所有奖项洗牌到数组中然后抽奖就是随机下标,同时记录对应下标位置的奖项情况
当然如果觉得50W太大,,5W长度也行,,不过每个下标对应的位置就是个int数字了比如下标100是特等奖,初始就是10抽一次-1,为了提高如五等奖中奖率,可以将500才分成多个块,比如下标110个210个等等其他一样
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
引用3楼sjlzcj的回复:Quote: 引用2楼weixin_42129373的回复:
兄弟,没中奖的中将名额是无限的,也就是正无穷,然后特等奖概率是1/50000,你觉得这逻辑上说得通吗

为什么说不通?抽奖是活动,活动不结束就一直可以抽奖,但不代表奖项没有发完。也就是在最后一个奖项发完之后,抽奖的永远都是谢谢参与

@wuhuayangs
简单点的方案,建立一个50W长度的数组然后将所有奖项洗牌到数组中然后抽奖就是随机下标,同时记录对应下标位置的奖项情况
当然如果觉得50W太大,,5W长度也行,,不过每个下标对应的位置就是个int数字了比如下标100是特等奖,初始就是10抽一次-1,为了提高如五等奖中奖率,可以将500才分成多个块,比如下标110个210个等等其他一样
哈哈,你这个想法很有意思,先不说“在最后一个奖项发完之后,抽奖的永远都是谢谢参与”有没有现实意义,我对中奖率的理解:(所有能中将的票数)/(所有能中将的票数+所有不能中将的票数)这样有错吗
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
staticint[][]arr={{10,10},{30,20},{80,50},{180,100},{480,300},{980,500},{99999999,99999999}};
staticString[]desc={"特等奖","一等奖","3等奖","4等奖","5等奖","6等奖","7等奖"};
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
inti=1000;
while(i-->0){
comeOn((int)(Math.random()*500000+1));
}
}
publicstaticvoidcomeOn(intrandom){
for(inti=0;i0){
arr[1]=arr[1]-1;
System.out.println(desc);
return;
}else{
System.out.println(desc[desc.length-1]);
}
}
}
}
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
1没中奖谢谢参与中将名额:无限额
2五等奖:10元代金券中奖名额:500名概率50/50000
3四等奖:水动力套装中奖名额:300名概率30/50000
4三等奖:鱼子蛋白套装.。中奖名额:100名概率10/50000
5二等奖:二等奖-电热水壶中奖名额:50名概率5/50000
6一等奖:时尚手机中奖名额:20名概率2/50000
7特等奖:深圳亲海两日游中奖名额:10名特等奖概率是1/50000
出一个随机整数1到50000范围内(自己百度,注意是整数,不带小数位)
结果为1,则是特定奖
结果为2,3则是一等奖
结果为4,5,6,7,8则是二等奖
结果为9-18则是三等奖
结果为19-48则是四等奖
结果为49-98则是五等奖
其它为[谢谢参与],中将但奖品已发完为[谢谢参与]

回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
难道这种活动,还真的能中奖吗?如果真能中,那6楼的就挺好的。
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
引用5楼nayi_224的回复:staticint[][]arr={{10,10},{30,20},{80,50},{180,100},{480,300},{980,500},{99999999,99999999}};
staticString[]desc={"特等奖","一等奖","3等奖","4等奖","5等奖","6等奖","7等奖"};
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
inti=1000;
while(i-->0){
comeOn((int)(Math.random()*500000+1));
}
}
publicstaticvoidcomeOn(intrandom){
for(inti=0;i0){
arr[1]=arr[1]-1;
System.out.println(desc);
return;
}else{
System.out.println(desc[desc.length-1]);
}
}
}
}

else后面少个return
回复

使用道具 举报

千问 | 2021-1-27 06:48:26 | 显示全部楼层
引用4楼weixin_42129373的回复:Quote: 引用3楼sjlzcj的回复:
Quote: 引用2楼weixin_42129373的回复:
兄弟,没中奖的中将名额是无限的,也就是正无穷,然后特等奖概率是1/50000,你觉得这逻辑上说得通吗

为什么说不通?抽奖是活动,活动不结束就一直可以抽奖,但不代表奖项没有发完。也就是在最后一个奖项发完之后,抽奖的永远都是谢谢参与

@wuhuayangs
简单点的方案,建立一个50W长度的数组然后将所有奖项洗牌到数组中然后抽奖就是随机下标,同时记录对应下标位置的奖项情况
当然如果觉得50W太大,,5W长度也行,,不过每个下标对应的位置就是个int数字了比如下标100是特等奖,初始就是10抽一次-1,为了提高如五等奖中奖率,可以将500才分成多个块,比如下标110个210个等等其他一样
哈哈,你这个想法很有意思,先不说“在最后一个奖项发完之后,抽奖的永远都是谢谢参与”有没有现实意义,我对中奖率的理解:(所有能中将的票数)/(所有能中将的票数+所有不能中将的票数)这样有错吗

站在数学或者程序的角度你的理解没有问题,但实际是抽奖是一种活动,为了某些目的的活动,促销也好,提升活跃度也好。所以未中奖的概率其实只是一块遮羞布,实际操作中,只要确保奖品,尤其是各种大奖以小概率发放出去即可以了,就算你严格的按照数学去设定特等奖的概率,但实际上谁有会去统计这个是否正确呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行