设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4904|回复: 17
打印 上一主题 下一主题

[其它] 随机数存在重复的问题

[复制链接]
跳转到指定楼层
1#
发表于 2006-5-27 00:58:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
生成随机8位数,位于1-49之间

可是不能保证8个数字没有重复的

这如何解决呢?谢谢!



Private Sub cmdspin_Click()
Randomize
Dim MyNumber(7) As Integer

MyNumber(0) = Int((49 * Rnd) + 1)
MyNumber(1) = Int((49 * Rnd) + 1)
MyNumber(2) = Int((49 * Rnd) + 1)
MyNumber(3) = Int((49 * Rnd) + 1)
MyNumber(4) = Int((49 * Rnd) + 1)
MyNumber(5) = Int((49 * Rnd) + 1)
MyNumber(6) = Int((49 * Rnd) + 1)
MyNumber(7) = Int((49 * Rnd) + 1)

num.Value = MyNumber(0) & "," & MyNumber(1) & "," & MyNumber(2) & "," & MyNumber(3) & "," & MyNumber(4) & "," & MyNumber(5) & "," & MyNumber(6) & "," & MyNumber(7)

End Sub

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
18#
发表于 2013-11-7 10:25:38 | 只看该作者
{:soso_e119:}
17#
发表于 2006-12-31 05:49:00 | 只看该作者
16#
发表于 2006-9-5 06:03:00 | 只看该作者
[em01][em02]
15#
发表于 2006-5-28 19:58:00 | 只看该作者
14#
发表于 2006-5-28 06:10:00 | 只看该作者
好经典的算法。不愧为专业程序员!
13#
发表于 2006-5-27 21:18:00 | 只看该作者
以下是引用wu8313在2006-5-27 10:16:00的发言:


我按照 总斑竹 LucasLynn 在10楼给出的代码,运行一下,怎么发现了重复值?

关于这段代码的算法,还不明白,不知道 num 变量是否指 最终输出结果?

如果是的话,就发现了重复值,相关图片如下:

请总斑竹 林路先生再看看,当然也可能是我理解错了吧?




不好意思,有一处笔误:

    A(tmp) = A(49 - i)
    A(49 - i) = tmp2

12#
发表于 2006-5-27 18:16:00 | 只看该作者
我按照 总斑竹 LucasLynn 在10楼给出的代码,运行一下,怎么发现了重复值?

关于这段代码的算法,还不明白,不知道 num 变量是否指 最终输出结果?

如果是的话,就发现了重复值,相关图片如下:






请总斑竹 林路先生再看看,当然也可能是我理解错了吧?

[此贴子已经被作者于2006-5-27 10:22:30编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
11#
发表于 2006-5-27 18:00:00 | 只看该作者


Private Sub Command0_Click()
    Dim aa As Integer   '取值范围
    Dim bb As Integer   '取值个数
    Dim n As Integer
    Dim m As Integer
   
    Dim str As String
   
    Dim rst As New ADODB.Recordset
   
    aa = 49
    bb = 8
    n = 0
    m = 0
   
    Randomize
   
    rst.Open "表1", CurrentProject.Connection, , adLockOptimistic
   
    DoCmd.SetWarnings False
    DoCmd.RunSQL "delete * from 表1"
    DoCmd.SetWarnings True
   
    Do Until n = aa
        n = n + 1
        rst.AddNew
        rst(0) = n
        rst.Update
    Loop
   
    Do Until m = bb
        m = m + 1
        
        rst.MoveFirst
        
        n = Int((aa * Rnd) + 1)
        
        rst.Move n
              
        str = str & " " & rst(0)
        
        rst.Delete
        
        aa = aa - 1
        
    Loop
   
    MsgBox str
   
End Sub



[此贴子已经被作者于2006-5-27 10:02:13编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
10#
发表于 2006-5-27 15:53:00 | 只看该作者
算法描述:建立一个下标为1...N的数组A。

1、随机生成一个1...N之间的数X。

2、取数A(X)。

3、交换A(X)和A(N)

4、N=N-1

5、重复以上步骤。

Private Sub cmdspin_Click()
  Dim A(49) As Integer
  Dim i As Integer
  Dim tmp As Integer
  Dim tmp2 As Integer
  Dim num As String

  For i = 1 To 49
    A(i) = i
  Next i

  Randomize

  For i = 0 To 7
    tmp = Int(((49 - i) * Rnd) + 1)

    tmp2 = A(tmp)
    A(tmp) = A(49 - i)
    A(49 - i) = tmp2

    num = num & tmp2 & ","
  Next i

End Sub

以上代码可用于任意N个数中取M个数。




[此贴子已经被作者于2006-5-27 13:18:32编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-16 03:12 , Processed in 0.095473 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表