2 qq 33548622 qq_33548622 于 2016.01.19 09:11 提问

服务器简单算法,大转盘活动,中奖概率,靠谱吗????

public Integer getRand() {
Integer result = null;
int sum = 100;//后台可更改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum <10) {
result = 3; // 三等奖
}
return result;
}

这个概率应该后台可以控制吧!
后台管理有个字段,用来写各个奖品获得概率,
只要我是问问  这样靠谱吗?

大家有啥好的建议!!


其实,概率后台来设定是不是不公平???
不透明!

嗯。。
有多少人抽奖  也不是预知的,
我再思考思考




sum 调成1000,

一等奖 中奖率是千分之一吗???

public Integer getRand() {
Integer result = -1;
int sum = 1000;// 后台可修改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
int time = new Date().getSeconds() % 2;// 秒数为2 的倍数
if (time == 0) {
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum < 25) {
result = 3; // 三等奖
}
}
return result;
}

10个回答

enpterexpress
enpterexpress   2016.01.19 09:15

你可以写个测试方法来测试一下

qq_33548622
qq_33548622 正在测,大家有啥好的建议!!
接近 2 年之前 回复
sinat_31535993
sinat_31535993   Rxr 2016.01.19 09:17

这样写,逻辑上是没有问题,但是你多测试几次,就会发现中奖率高的吓人

qq_33548622
qq_33548622 回复sinat_31535993: 厉害!!的确 二三等奖 概率 一样!嘿嘿,草率了点,我再想想,谢谢昂
接近 2 年之前 回复
sinat_31535993
sinat_31535993 回复qq_33548622: 首先,概率问题1-(0.99)^n中奖率,n在几十次的时候中奖率就超过50%了吧;其次,二等奖和三等奖的逻辑概率居然是一样的!最后一般中奖都是有限制的,一等奖1个这种。一般都是和时间等等混合在一起在判断,加大中奖难度。
接近 2 年之前 回复
qq_33548622
qq_33548622 为啥子?
接近 2 年之前 回复
qq_33548622
qq_33548622   2016.01.19 09:19

不知为何。。没有不中奖的时候!!!

91program
91program   Ds   Rxr 2016.01.19 09:19

你这个算法应该不靠谱,中奖率太高。当然,你如果是设计的中奖概率就这么高就没有问题。
中奖的算法,不可能这么简单的。

qq_33548622
qq_33548622 能有 多难啊!!给点建议,,后台可以该sum 数值,100是测试 用的
接近 2 年之前 回复
Royal_lr
Royal_lr   Ds   Rxr 2016.01.19 09:21

首先这个 new Random().nextInt(sum)生成的随机数范围是0<=num<sum,,,我不知道你指的靠谱是什么,,

Royal_lr
Royal_lr 回复qq_33548622: 简单确实是简单,,但是是这么个原理
接近 2 年之前 回复
Royal_lr
Royal_lr 回复qq_33548622: 简单确实是简单,,但是是这么个原理
接近 2 年之前 回复
qq_33548622
qq_33548622 回复茛敉犸: .....
接近 2 年之前 回复
oAiTan
oAiTan 回复qq_33548622: .。。。。。。。
接近 2 年之前 回复
qq_33548622
qq_33548622 感觉 算法太简单了
接近 2 年之前 回复
qq_27183003
qq_27183003   Ds   Rxr 2016.01.19 09:28

一般先根据时间或其他产生一个种子数,再使用随机数,否则每次产生的随机数序列都相同。

qq_33548622
qq_33548622 回复ysuwood: java,我先去网上看看 吧,,,谢了
接近 2 年之前 回复
qq_27183003
qq_27183003 你用这是java? 百度搜搜,我只有c++的
接近 2 年之前 回复
qq_33548622
qq_33548622 有 比如吗!!嘿嘿
接近 2 年之前 回复
tracyyh0911
tracyyh0911   2016.01.19 09:53

这个中奖率确实是高的,如果是促销之类的一些推广活动,奖品小点,应该是可以的

qq_33548622
qq_33548622 后台可以修改 sum 数值,100 是测试 用的
接近 2 年之前 回复
xionglangs
xionglangs   Rxr 2016.01.19 10:41

可以多加几个随机吗if (randomNum == 1) {里面继续随机,想即便就即便}

xmt1139057136
xmt1139057136   Rxr 2016.01.19 11:18

前端过滤一部分,后端算法过滤一部分!
你这个中奖概率太高了,不行

qq_33548622
qq_33548622 回复伪砖家: sum 调成1000, 一等奖 中奖率是千分之一吗??? public Integer getRand() { Integer result = -1; int sum = 1000;// 后台可修改 int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数 int time = new Date().getSeconds() % 2;// 秒数为2 的倍数 if (time == 0) { if (randomNum == 1) { result = 1;// 一等奖 } else if (randomNum < 5) { result = 2; // 二等奖 } else if (randomNum < 25) { result = 3; // 三等奖 } } return result; } 我改成这样了
接近 2 年之前 回复
xmt1139057136
xmt1139057136 回复qq_33548622: 一部分是为了高并发,一部分是降低抽奖概率
接近 2 年之前 回复
qq_33548622
qq_33548622 为什么 会 过滤 呢????
接近 2 年之前 回复
qq_33548622
qq_33548622   2016.01.19 11:31

sum 调成1000,
一等奖 中奖率是千分之一吗???

public Integer getRand() {
Integer result = -1;
int sum = 1000;// 后台可修改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
int time = new Date().getSeconds() % 2;// 秒数为2 的倍数
if (time == 0) {
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum < 25) {
result = 3; // 三等奖
}
}
return result;
}

我改成这样了
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!