怎样使以下随机函数不重复出现(VB)?

这是公司一个知识竞赛选题的ppt,想问一下,如何更改编程才能使题目不重复出现?请大神指教,谢谢!

给一个小程序,希望有帮到您。

Dim n As Integer, a(20) As Integer


Private Sub Command1_Click()  '初始化

 n = 20

 For i = 1 To n

   a(i) = i

 Next i

 Print

 Command2.Enabled = True

End Sub


Private Sub Command2_Click()    '随机抽取不重复数字

  Randomize

  k = Int(Rnd * n) + 1

  Print a(k);

  a(k) = a(n)

  n = n - 1

  If n Mod 10 = 0 Then Print

  If n = 0 Then Command2.Enabled = False

End Sub

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-07
你用的是随机函数啊。。随机函数只是随机出现,不代表不会重复啊
你这样搞,定义个数组。然后把查询过的随机数据保存在数组里。
在下次查询的时候使用FOR循环检索下,然后再for里用个if去判断。重复的直接跳过。。。
这样就行了、
代码会写吗?不会的话追问,我给你写好追问

麻烦帮写一下 我不会写O(∩_∩)O~ 下面是原来的部分代码 谢谢!

a = Fix(Rnd * 54 + 1) '使用随机函数
抽取框.Text = a
结果框.Text = ""
DoEvents
Loop
End Sub

Private Sub 停止_Click()

结果框.Text = 抽取框.Text
已抽题目 = 已抽题目 + 抽取框 + " "
停止.Enabled = False
End
End Sub

本回答被提问者采纳
第2个回答  2014-07-19

不知道你的意图,但是这个不可能产生重复的题号,你可以参考。

第3个回答  2014-07-18

我给你一个思路,你把题目保存在数组中,你的应该是54个题,根据随机数的值交换两个数组成员的值,把顺序打乱。你固定输出一个或多个题即可。

例如:

dim D(3) asinteger, v as integer
For v=1 to 3
D(3)=v
Next
For v=1 to 3
If RND>0.5 then
D(0)= D(1)
D(1)= D(v)
D(v)= D(0)
End if
Next

假设,

第一次随机数大于0.5,D(1)和D(1)交换;1,2,3

第二次随机数大于0.5,D(2)和D(1)交换;2,1,3

第三次随机数大于0.5,D(3)和D(1)交换;3,1,2

 

第一次随机数大于0.5,D(1)和D(1)交换;1,2,3

第二次随机数不大于0.5,不交换;1,2,3

第三次随机数大于0.5,D(3)和D(1)交换;3,2,1

 

第一次随机数大于0.5,D(1)和D(1)交换;1,2,3

第二次随机数大于0.5,D(2)和D(1) 交换;2,1,3

第三次随机数不大于0.5,不交换;2,1,3

 

就出现123;312;321;213四种组合了,由于是根据随机数交换的他也就是随机的。

我们最后来输出D(1),就是1,3,3,2了。每次输出的都不一样。就不存在重复了,当然交换的规律可以自己设定。

一般来说,在抽签的过程中,概率是逐步升高的。

例如,有五只签,第一次抽取某只签的概率是五分之一。第二次抽取的是四分之一……

因为,第一次抽完后,就只剩下四只签了,要模拟抽签的过程就要每次都要做相应的调整。

第4个回答  2014-07-18
建立一个公共变量数组,记录每次抽取的题号,称为已抽取题号库。点“开始”,随机生成的题号与已抽取题号库进行一一对比:
如果存在,重新生成;
如果不存在,就可以取为结果,并存进题号库
相似回答