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

解决方案 »

  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.   

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

  6.   

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

  7.   

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

  8.   

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

  9.   

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