| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 434 人关注过本帖, 1 人收藏
标题:为什么还会产生重复的数字
只看楼主 加入收藏
magicsky1394
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-28
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:3 
为什么还会产生重复的数字
做了一个随机抽取学生学号的程序,通过文本框输入学生总人数和要抽取的学生人数,抽取学生(包括消除重复学号),把抽出的学号排序,最后输出。
运行过程中,为什么仍然会产生重复的学号?
Private Sub Command1_Click()
    Dim Total As Integer, Sel As Integer, c()  As Integer
    Dim i As Integer, j As Integer, Temp As Integer
    Total = Val(Text1.Text)
    Sel = Val(Text2.Text)
    ReDim c(1 To Sel)
    c(1) = Int(Rnd * Total) + 1
    For i = 2 To Sel
        c(i) = Int(Rnd * Total) + 1
        For j = 1 To (i - 1)
            Do While c(i) = c(j)
               c(i) = Int(Rnd * Total) + 1
            Loop
        Next j
    Next i
    For i = 1 To (Sel - 1)
        For j = (i + 1) To Sel
            If c(i) > c(j) Then
                Temp = c(i)
                c(i) = c(j)
                c(j) = Temp
            End If
        Next j
    Next i
    Text3.Text = "以下学号的同学需要交作业:"
    For i = 1 To Sel
        Text3.Text = Text3.Text & vbCrLf & Format(c(i), "00")
    Next i
End Sub

[ 本帖最后由 magicsky1394 于 2013-5-4 22:59 编辑 ]
2013-05-04 22:58
seafish011
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:167
专家分:694
注 册:2011-11-8
收藏
得分:0 
加个randomize进去
2013-05-05 00:43
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:20 
算法错误
            Do While c(i) = c(j)
               c(i) = Int(Rnd * Total) + 1
            Loop
这只能保证当前c(j)<>c(i),却不能保证c(i)也能不等于已经比较了的c(j),即不能保证c(i)<>c(j-1)。主要是do循环和for循环用反了,正确代码如下(验证时用text1=text2,即全班全部交作业来验证):
Private Sub Command1_Click()
    Dim Total As Integer, Sel As Integer, c()  As Integer, f As Boolean
    Dim i As Integer, j As Integer, Temp As Integer
    Total = Val(Text1.Text)
    Sel = Val(Text2.Text)
    ReDim c(1 To Sel)
    For i = 1 To Sel
      Do
        c(i) = Int(Rnd * Total) + 1
        f = False
        For j = i - 1 To 1 Step -1
          If c(i) = c(j) Then
            f = True
            Exit For
          End If
        Next
      Loop While f
    Next
    For i = 1 To (Sel - 1)
        For j = (i + 1) To Sel
            If c(i) > c(j) Then
                Temp = c(i)
                c(i) = c(j)
                c(j) = Temp
            End If
        Next j
    Next i
    Text3.Text = "以下学号的同学需要交作业:"
    For i = 1 To Sel
        Text3.Text = Text3.Text & vbCrLf & Format(c(i), "00")
    Next i
End Sub
2013-05-05 08:09
magicsky1394
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2013-3-28
收藏
得分:0 
明白了,非常感谢!
2013-05-05 09:03
快速回复:为什么还会产生重复的数字
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057685 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved