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



请问从1到n范围内抽取出x个不重复随机数的代码是不是这样写


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


请问从1到n范围内抽取出x个不重复随机数的代码是不是这样写[已结贴,结贴人:punchwei1]
发表于:2007-08-10 16:38:05 楼主
请问,我希望写一个能够获得x个1   to   n范围内的不重复随机数的代码。应该如何写代码。也就是从1、2、3...n这些数中随机挑出x个。
以下代码的作用是获得x个0   to   n范围内的不重复随机数,其原理是“快速跳蚤算法”。应该如何改写,才能编程从1   to   n范围内抽取。
'初始化
for   i=0   to   n
a(i)=i
next
'乱序
for   i=0   to   (x-1)
r=int(rnd*(n+1))
swap   a(i),a(r)
next
'拣出
for   i=1   to   x
b(i)=a(i-1)  
next
发表于:2007-08-10 16:49:231楼 得分:0
以下这样改是否正确?
for   i=1   to   n
a(i)=i
next
'乱序
for   i=1   to   x
r=int(rnd*n)
swap   a(i),a(r)
next
'拣出
for   i=1   to   x
b(i)=a(i-1)  
next
发表于:2007-08-10 17:02:112楼 得分:0
你如何保证不重复。
发表于:2007-08-10 17:10:563楼 得分:0
也就是说:1   to   n   和0   to   n的代码有何区别?
发表于:2007-08-10 17:22:154楼 得分:30
给你一段代码参考一下
dim   blaaa   as   boolean
        dim   j   as   integer
        for   i   =   0   to   x
                randomize
                r   =   int(rnd   *   n   +   1)                
                for   j   =   0   to   i
                        if   a(i)   =   r   then
                                i   =   i   -   1
                                blaaa   =   true
                                exit   for
                        end   if
                next   j                
                if   not   blaaa   then
                        a(i)   =   r
                else
                        blaaa   =   false
                end   if
        next   i
发表于:2007-08-10 18:08:015楼 得分:0
'代码是随手写的,有错,修改。原自你代码的变量均不再定义
        dim   blaaa   as   boolean                 '是否重复标记
        dim   j   as   integer
        for   i   =   1   to   x   +   1                     '此处修改
                randomize
                r   =   int(rnd   *   n   +   1)
                for   j   =   1   to   i   -   1             '此处修改
                        if   a(j)   =   r   then         '验证是否重复
                                i   =   i   -   1
                                blaaa   =   true
                                exit   for
                        end   if
                next   j
                if   not   blaaa   then   '
                        a(i)   =   r
                else
                        blaaa   =   false
                end   if
        next   i
发表于:2007-08-11 19:44:146楼 得分:0
thanks.inspired   by   your   answere.


快速检索

最新资讯
热门点击