软件注册站
热情软件屋

 
如何不重复地产生随机数
编号: QA002179    
建立日期: 1999年12月6日 最后修改日期: 2005年4月17日
所属类别: Visual Basic - 其他方面
   
    操作系统: windows98
    编程工具: VISUAL BASIC 6.0
    问题: 我现在要做一个类似于用身份证号码抽奖的程序。要求从1到370随机抽取一个整数,并且每次抽取的数字不得相同,但为保证公平又要每个数字都有可能抽到,当然抽取的次数不大于370次,不知用VB6如何实现。如能解决,万分感谢!(孙向斐)
   
    实现的方法有很多,下面只是一种。先建立一组标志,如果选中了就设置为1。每次选数时,先判断标志是否为1,如果不为1,则选中,否则忽略选择下一个。下面是例子:
     Dim n(1 To 370), i, j, q
    
     For i = 1 To 370
     n(i) = 0
     Next
     j = 0
     Randomize Timer
     While j < 10
     q = Int(Rnd(1) * 369 + 1)
     If n(q) = 0 Then
     Print q
     n(q) = 1
     j = j + 1
     End If
     Wend
    

    孙向斐又问:
    我想让1到370个数字在窗体内不停的快速循环显示,一按下停止按钮或按下回车键就停止显示,应如何做。最好能和以上程序结合起来。谢谢!
    回答:可以建立两个按钮,Command1和Command2,其中Command1是开始按钮,Command2是结束按钮。再加上Label1。
    Dim bStop As Boolean
    Dim n(1 To 370), i, j, q
    
    Private Sub Command1_Click()
     Command1.Visible = False
     Randomize Timer
     While j < 10
     q = Int(Rnd(1) * 369 + 1)
     Label1.Caption = q: DoEvents
     If n(q) = 0 And bStop = True Then
     Print q
     n(q) = 1
     j = j + 1
     bStop = False
     End If
     Wend
    End Sub
    
    Private Sub Command2_Click()
     bStop = True
    End Sub
    
    Private Sub Form_Load()
     For i = 1 To 370
     n(i) = 0
     Next
     j = 0
     bStop = False
    End Sub
    

    
    物理大腕的意见:
    可以这样设计:
    先产生一个具有所有元素的数组:
    例如:
    dim A(370) as integer
    for i=1 to 370
     A(i)=i
    next
    
    

    然后逐个随机交换,就是第1个和随机的某个元素交换。然后第2个和随机的某个元素交换...........
    最后得到随机不重复的数列,这样,你需要几个不重复的随机数都可以从开头取。
    
    Spencer Yang的意见:
    请到纪文和网站『VB入门网』
    http://www.vbguide.com.tw/webback.asp
    看看「个个击破」 单元中的
    ---------------------------------------
    380 如何产生没有重复的乱数 (Non-Repeating Random)

    

此问题由李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 其他方面,

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio