回 帖 发 新 帖 刷新版面

主题:要在1-10之间找4个不重复的随机数。请教!

    在1到10之间找4个不重复的随机数。我的思路是随机产生4个数,然后判断它们之间是否存在重复。即产生4个数后判断:
   if t(1)<>t(2) and t(1)<>t(3) and t(1)<>t(4) and t(2)<>t(3) and t(2)<>t(4) and t(3)<>t(4) then ....
   这样很麻烦,而且有时间很费时间的。请问有什么更好的代码吗?

回复列表 (共22个回复)

11 楼

你是用家里的电脑上网的话,发言后,打开,把该页放进收藏夹就好办了!

12 楼

建立一个WORD文档,把你的发言的标题写入word中,发言后,打开你的发言,然后把地址栏中的地址复制到标题后面。下次上网时,只要单击该地址就可以了。

13 楼

是本论坛吗,登陆后,上面不是有一个“我的帖子”吗?单击打开就行了。

14 楼

Private Sub Form_DblClick()
    Dim a(4)
    Dim i As Integer, j As Integer
    Dim k As Integer
    Dim r As Boolean
    r = False

    Do Until i = 4               '此处不可用for i=0 to 4 来替,原因下文一看便知
      Randomize
         k = Int(Rnd * 10 + 1)
          For j = 0 To i         '关键部分
             If k = a(j) Then
                r = True
                Exit For
             Else
                r = False
             End If
          Next j
      If r = False Then
          a(i) = k
          Print a(i),
          i = i + 1
      End If
    Loop
    Print
End Sub

15 楼

楼上的就是那种慢的方法.
上面已经有人说了一种比较好的.
建立一个数组a(10),建立总数量标志cnt,首先在10个数中抽取一个随机数,然后从那个位置起一次将后面的前移,然后总数量标志-1,然后下次就在cnt中抽取随机数就可以了.
这样就不会出现重复了.

16 楼

我觉得楼上说的有点问题
如果那样的话,对总数量标志的处理会比较麻烦,因为你还要先去确定提取出来的数组元素的具体位置,而且还要进行移动,速度会比较慢
我有一个方法,如果你要提4个的话,就建一个a(3)的数组,把前几次得出的结果保存在那个数组中,然后用新的随机数和数组中的比较应该就可以了
如有说错,请更正 

17 楼

更正: 应该用a(4)数组,这样便于保存

18 楼

你是不是想做彩票选号码程序啊,我看到一个用DELPHI编的,用集合的办法

19 楼

'交换法应该是很快的(附代码)
Dim S(1 To 10) As Integer, R(1 To 4) As Integer, n%, x%, i%
Randomize
n = 10
For i = 1 To 10: S(i) = i: Next i
For i = 1 To 4
    x = Int(n * Rnd + 1)
    R(i) = S(x)
    S(x) = S(n)
    n = n - 1
Next i

20 楼

不知道这个可以不:
dim a(1to4) as integer,b(1to4) as integer
dim i as integer,j as integer
     for i = 1 to 4
       a(i)=int(9*rnd+1)
       b(i)=a(i)
      next i
   for i =1 to 4
     for j = 1 to 4
       if b(j) = a(i)  then
       exit for
       else
       print a(i);
      end if
      next j
    nexti

我来回复

您尚未登录,请登录后再回复。点此登录或注册