怎样控制随机抽奖的中奖率?

时间:2022-12-06 09:07:29
很简单的一个要求:
比如有6物品,客户要求要达到30%或者40%的中奖率,这个是可以让客户自定义的,应该怎么做?
这6个物品对应在数据库中分别有六个id,我把这6个物品在程序中导入到一个strList: TStrings;里面
然后用strlist.count来随机抽取,但是这个是每次抽取都要中奖,达不到客户要求的30%或者40%自定义的
中奖率,就是有70%或者60%的几率是抽不中的,用timer控件来自动控制停止

10 个解决方案

#1


你再加9个不中奖的id(随便编)到你的strlist中不就行了

#2


几率表:
30 个1  70 个0 ,组合成100个数字的tstringlist  ,然后随机取这里面的一个数字,取到1的几率就是30%了


物品表:
再取到1的基础上,去  物品列表中随机取一个中奖物品,就是6个中随便取一个

#3


这好办,6个是吧,6个ID,
你在TStringList中再加入14个无效的ID,然后用随机数
Random(20)作为索引值,基本就能保证30%
同样,40%那就自己算算TStringList中一共需要多少个无效ID就是了

#4


嗯,二楼说的有道理哦,更结合一下,取随机数
Random(10)<3就是30%了,Random(10)<4就是40%
if Random(10) < 3 then
begin
  //30%中奖,给奖品就试了
end
else
begin
  //70%没中奖的,抱歉了,呵呵
end;

#5


用Random判斷........

#6


呵呵,首先谢谢各位了!
但是我要用timer控件来控制时间啊,比如客户设定轮盘转动5秒或者7秒等,该咋个做哦?

#7


根据输入设置时间周期,如5s或7s,启动时打开timer计时,一个时间周期到了就结束

#8


如果中奖和不中奖的选择都在一个轮盘中给用户看到,并且轮转,那么你就需要像我在3楼说的,按照几率想列表中插入若干无效的ID,把中奖ID用随机函数分配到不中奖的ID中,然后在Timer的控制下进行抽奖。

#9


这种问题哎

if Random(100) < 用户设置的中奖率 then
begin
  //中奖了  随即从StringList里取一个吧
end
else
begin
  //没中奖  下次继续努力
end;

#10


Random(100) < 22          22%的中奖几率

#1


你再加9个不中奖的id(随便编)到你的strlist中不就行了

#2


几率表:
30 个1  70 个0 ,组合成100个数字的tstringlist  ,然后随机取这里面的一个数字,取到1的几率就是30%了


物品表:
再取到1的基础上,去  物品列表中随机取一个中奖物品,就是6个中随便取一个

#3


这好办,6个是吧,6个ID,
你在TStringList中再加入14个无效的ID,然后用随机数
Random(20)作为索引值,基本就能保证30%
同样,40%那就自己算算TStringList中一共需要多少个无效ID就是了

#4


嗯,二楼说的有道理哦,更结合一下,取随机数
Random(10)<3就是30%了,Random(10)<4就是40%
if Random(10) < 3 then
begin
  //30%中奖,给奖品就试了
end
else
begin
  //70%没中奖的,抱歉了,呵呵
end;

#5


用Random判斷........

#6


呵呵,首先谢谢各位了!
但是我要用timer控件来控制时间啊,比如客户设定轮盘转动5秒或者7秒等,该咋个做哦?

#7


根据输入设置时间周期,如5s或7s,启动时打开timer计时,一个时间周期到了就结束

#8


如果中奖和不中奖的选择都在一个轮盘中给用户看到,并且轮转,那么你就需要像我在3楼说的,按照几率想列表中插入若干无效的ID,把中奖ID用随机函数分配到不中奖的ID中,然后在Timer的控制下进行抽奖。

#9


这种问题哎

if Random(100) < 用户设置的中奖率 then
begin
  //中奖了  随即从StringList里取一个吧
end
else
begin
  //没中奖  下次继续努力
end;

#10


Random(100) < 22          22%的中奖几率