+ -
当前位置:首页 → 问答吧 → vb 随机数分组,每组不重复

vb 随机数分组,每组不重复

时间:2010-02-04

来源:互联网

'1.实现随机产生的数字
'2.随机产生的数字不能重复
'3.根据输入的数字判断分多少个组
'4.每组随机产生的数字不能重复
'5.根据输入的数字判断每组产生多少个随机数
'6.用户可输入数字作为判断基数
'
'
'
'以下是我的代码,不能实现,麻烦高手帮帮忙



Private Sub Command1_Click()
Dim a(20) As Integer, b(20) As Integer, c(1 To 6) As Integer, d(1 To 7) As Integer
Dim change As Integer, zu As Integer, num As Integer
num = CInt(Text1.Text)
If num < 30 Then Label2(1).Caption = "至少30人"
If num >= 30 Then
If num Mod 6 = 0 Then
zu = 6
Label2(1).Caption = "共分" & zu & "个组"
Label17.Caption = ""
Label10.Caption = ""
End If
If num Mod 6 <> 0 Then
zu = 7
Label2(1).Caption = "共分" & zu & "个组"
End If
End If
Dim mrs As Integer
'If zu = 6 Then
mrs = num / 6
Randomize '初始化随机数
For i = 1 To mrs
1
'ReDim a(i)
'Dim c
'c = num - 1
a(i) = Int(Rnd * num + 1) '生成1-num的随机数
For j = 1 To i - 1 '把a(i) 跟a(i)前的数相比
If a(i) = a(j) Then GoTo 1 '如相同则重新赋值
Next j
Next i
'按降序排列
For i = 1 To mrs
For j = 1 To i
If a(i) < a(j) Then '把a(i)和后面的数比
change = a(i) '发现有大的则交换
a(i) = a(j)
a(j) = change
End If
Next j
Next i
Label4.Caption = ""
For i = 1 To mrs
Label4.Caption = Label4.Caption & a(i) & Chr(13)
Next i
'ReDim b(i)
'Dim nu As Integer
'For i = 1 To num
'a(nu) = i
'Next i
'b(nu) = a(nu) - a(i)


End Sub

Private Sub Form_Load()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub


Private Sub Timer1_Timer()
Label3.Caption = Format(Now, "YYYY年MM月DD日") & Chr(13) & Chr(13) & Format(Now, "AMPM(hh:mm:ss)")
End Sub

作者: johnmo   发布时间: 2010-02-04

既然你随机数的取值范围是 [1,num],那么不如用跳蚤算法,将这数字打乱,然后分组。
就像洗牌一样,应该符合你的需求。

作者: Tiger_Zhao   发布时间: 2010-02-04

还请高手说说这“跳骚算法”啊,本人新手,谢谢了

作者: johnmo   发布时间: 2010-02-04

UP

作者: guyehanxinlei   发布时间: 2010-02-04

VB code
Dim a As Collection

Private Sub Command1_Click()
Dim b()
Dim i, j
Set a = New Collection
For i = 1 To 10000
a.Add i
Next
For j = O To Val(Text1)
For i = O To Val(Text1)
 Randomize
 MyVal = Int((a.Count * Rnd) + 1)
 ReDim Preserve b(i)
  b(i) = a.Item(MyVal)
  a.Remove MyVal
 Debug.Print Format(b(i), "0000")
 Next
 Next
End Sub

Private Sub Form_Load()
Text1.Text = 9 '默认每组10个数据
Text2.Text = 20 '默认抽20组
End Sub

作者: SYSSZ   发布时间: 2010-02-04

'默认抽21组

作者: SYSSZ   发布时间: 2010-02-04

但是我是想根据用户输入的数字(只输入一次)平均分为几组,每组的随机数都不重复,剩下的数字单独一组
'此程序相当于摇号程序,就是大家参加游戏,每人一个号,然后随机分组,参加游戏的人数就是用户输入的数
'我用的是vb6.0企业精简版

作者: johnmo   发布时间: 2010-02-05

帮顶蹭分

作者: yiguangqiang88   发布时间: 2010-02-05

不知道是不是这样:我用text1输入总人数,默认6组,最多7组(这个自己去调节)。
VB code
 
Private Sub Command1_Click()
Dim a() As Byte, Zu As Byte
Dim Num As Byte
Num = Val(Text1)
ReDim a(Num)
Dim i As Byte, n As Byte
For i = 1 To Num
ReMack: Randomize (Timer) '初始化随机数
a(i) = Int(Rnd * Num + 1) '生成1-num不重复的随机数
For n = 1 To UBound(a)
If a(i) = a(n) And i <> n Then GoTo ReMack
Next
' Debug.Print a(i)
Next
If Num Mod 6 = 0 Then
Zu = 6
Me.Caption = "共分" & Zu & "个组,每组" & Num \ 6 & "人"
For n = 0 To Zu - 1
For i = 1 To Num
If i Mod 6 = n Then Debug.Print "第" & n & "组:" & a(i)
Next
Next
Else
Zu = 7
If Num Mod 7 = 0 Then
Me.Caption = "共分 7 个组,每组" & Num \ 7 & "人"
For n = 0 To Zu - 1
For i = 1 To Num
If i Mod 7 = n Then Debug.Print "第" & n & "组:" & a(i)
Next
Next
End If
If Num Mod 7 <> 0 Then
Me.Caption = "共分 7 个组,前6组" & Num \ 6 & "人" & "第七组" & Num Mod 6 & "人"
For n = 0 To Zu - 1
For i = 1 To Num
If i Mod 7 = n Then Debug.Print "第" & n & "组:" & a(i)
Next
Next
End If
End If
End Sub


不知道怎么样?

作者: yiguangqiang88   发布时间: 2010-02-05

其实只要产生了不重复的随机数,分组就随便分了,按顺序取也可,比如44个,分7组,头6组按顺序每组取7个,剩下的2个作为一组就行了

作者: yiguangqiang88   发布时间: 2010-02-05

引用 2 楼 johnmo 的回复:还请高手说说这“跳骚算法”啊,本人新手,谢谢了

自己 Google 一下。
这个算法应该最符合你的需求了。

作者: Tiger_Zhao   发布时间: 2010-02-05

我觉得楼主你的思路有点乱

不重复的随机数好生成。
分几组也不难(根据什么分几组?定死的分6组或7组?)。
每组生成几个随机也不难(根据什么判断每组生成几个随机数,每组根据随机数确定的?)。
每组最后都要有具体的随机数吗,每组之间随机数是否可以重复?

我大体给你缕一下思路,你看对不对:
1)根据用户输入的一个数判断(x mod 6)分成6组或是7组,要先分好组。
2) 根据分成的组每组用随机数确定生成几个随机数,你的程序的一部分就行。
3)根据2)给每组生成具体随机数,你的程序的一部分就行。






作者: chinaboyzyq   发布时间: 2010-02-05

该回复于2010-03-12 11:38:14被版主删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
  • hfzrx
  • (hfzrx)
  • 等 级:
#13楼 得分:0回复于:2011-08-13 23:52:18
8楼的不错 学习了

作者: yk84   发布时间: 2010-03-11

热门下载

更多