您的位置:程序门 -> vb -> 基础类



抽奖问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


抽奖问题
发表于:2008-01-17 21:12:49 楼主
比如说有1000人参加抽奖.定义:a(1000),a是备选数据的数组,每次抽后,把抽出的数与数组的末处的交换,然后在前面进行随机抽取.原理是不是这样,那我如何区别奖项呢,比如说谁是一等奖,谁是二等奖,代码如何写啊
发表于:2008-01-18 13:41:561楼 得分:0
和你说的基本类似。

首先初始化数组a(1   to   1000)。比方说,有1个一等奖,那么数组中有1个元素值为1;有10个二等奖,数组中就有10个元素值为2……没有奖可以设为0。放的位置无所谓,不影响概率。

记n=1000。
第一个人来抽奖,在1~n范围内产生一个随机数t,看元素a[t]的值就可以知道是否中奖。然后将a[t]与队尾的a[n]交换,之后n值减一,变为999;
第二个人来抽奖,同样在1~n(注意这时n=999)范围内产生一个随机数t,根据a[t]判断是否中奖。然后再将a[t]与队尾的a[n]交换,n值减一;
……
如此循环直到n=0,所有人抽奖完毕.
发表于:2008-01-18 14:52:382楼 得分:0
这个问题好解决!   我一直都用这样的办法:

list控件:

先向list内写入范围[这个题目的范围是1-1000]

for   i   =   1   to   1000
        list1.additem   i
next   i

然后从这个范围内随机获取某一个项目   获得了以后记得干掉获取的项目,那样就不会有   下次获取同样项目值的事情发生了

我一直把list   当数组用.  
好处是数组的元素可以把它干掉

所以lz   的题目可以这样写写看:

=============cike例题==========
name=随机抽奖
form=command1+list1
步骤:
放入command1   和   list1   到   form1中贴入代码   运行既可
================================
vbscript code
private sub command1_click() randomize for i = 1 to 4 for j = 1 to i a = intrnd * list1.listcount) print i & "等奖" & i & "名,号码为:" & list1.list(a) list1.removeitem a next j next i end sub private sub form_load() for i = 1 to 1000 list1.additem i next i end sub


快速检索

最新资讯
热门点击