给别人做一个抽奖的系统,客户要求抽奖的概率可以自己随心所欲的定义,所以我冥思苦想了一天想出了一下的算法,但还没有写代码,想听听各位的意见,如果有更好的算法就帮我一下啦!
1、定义抽奖的中奖号码为一等奖:8888(1个);二等奖:888(5个);三等奖:88(20个);
2、首先客户可以自己定义每个奖品的中奖概率,一般都为1/1000这样的形式,程序根据客户输入的每个奖项的概率自动随机生成相对应的数字,比如1/1000就生成999个随机树,然后在1-999的范围内再随机生成一个数字iPos,把中奖的号码插入iPos这个位置,如果这个等级的奖品有5个(5/1000),那就随机生成995个,在随机取得5次iPos的值,分别插入这5个中奖号码
3、然后客户开始拍奖,程序由上而下循环的把上面生成的树列进行滚动,客户可以自由的暂停滚动(拍奖)。

解决方案 »

  1.   

    根据概率随机生成995个,这个不是问题吧!
    通过stringlist类,计算出来的1~995的数字存放到里面,通过随即数或者固定的方法,将中将号码替换stringlist类特定位置的数据。
    通过循环函数读取stringlist中的字符串,并显示在label控件上就可以了,通过键盘事件确定停止循环,显示一个showmessage消息,在回车可以继续循环,至于是否需要将一抽出来的将号删除,那就看客户的需求了。
      

  2.   

    stringlist.add('需要存放的数据');
    mids:=stringlist.strings[I]; //取得第I个数据。
    这个用法不要我再说了吧!
      

  3.   

    那我如果可以自由控制抽奖概率啊?
    to myling(阿德) :
      呵呵,乐观点吧!至少抽乒乓球的那种,我认为作弊的很少哦:)
      

  4.   

    to fengjn(小枫) :
      对呀!不过问题在中奖率为1/1000那就生成999个随机号码,如果为1/10000那就要生成9999个随机号码啊!这样岂不是特别慢啊!