标题:[求助]请问如何可以生成不重复的随机数?
取消只看楼主
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
结帖率:100%
 问题点数:0 回复次数:5 
[求助]请问如何可以生成不重复的随机数?

Dim t1 As Integer
Dim t(9) As String
For t1 = 0 To 10
t(t1) = Int((100 - 1 + 1) * Rnd + 1)
List1.AddItem t(t1)
Next t1

问题一:如何可以在100里面生成10个不重复的随机数。并连续的生成10次。

思路我想是,定义一个数组,然后在1到100的随机数里AddItem 10个的数组
但不知道该如何一编,请高手指教!帮忙!谢谢!

[此贴子已经被作者于2007-7-3 13:25:35编辑过]

搜索更多相关主题的帖子: 随机数 定义 Rnd Int 
2007-07-03 13:23
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
得分:0 
以下是引用随风逐流在2007-7-3 13:29:06的发言:
Randomize
i = Int((100 - 1 + 1) * Rnd + 1) 'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

谢谢楼上的朋友,但还是有重复的随机数出现~
有没有办法没有重复的?

2007-07-03 13:44
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
得分:0 
以下是引用随风逐流在2007-7-3 14:05:32的发言:

Private Sub Command1_Click()

Dim t1, t2 As Integer
Dim t3 As String
Dim t(9) As String
For t1 = 0 To 9
Randomize
t2 = Int((100 - 1 + 1) * Rnd + 1)
List1.AddItem abc(CStr(t2), t)
Next t1

End Sub

Private Function abc(a As String, b() As String) As String
Dim i As Integer
Dim bol As Boolean
bol = False
For i = LBound(b) To UBound(b)
If b(i) = a Then
bol = True
Exit For
End If
Next
If bol = False Then
abc = a
Else
Randomize
abc = abc(CStr(Int((100 - 1 + 1) * Rnd + 1)), b)
End If
End Function
试试

谢谢楼上的朋友~不过还是有重复的,感觉重复的随机数的是减少了一点~

2007-07-03 14:21
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
得分:0 
以下是引用随风逐流在2007-7-3 14:25:28的发言:

不会吧?还有重复的?
不可能吧?我用递归的方法,如果有重复就重新生成,直到不重复。怎么会还有重复的?

是的,有时没有重复,有时还是会有重复,我测试过了!

2007-07-03 14:34
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
得分:0 

谢谢楼上的朋友热心帮忙~现在我连续试了很多次,是没有重复了~
谢谢楼上朋友的帮忙!
另外请教高手朋友红色字部分的意思是怎么理解?谢谢!

Private Sub Command1_Click()

Dim t1, t2 As Integer
Dim t3 As String
Dim t(9) As String
For t1 = 0 To 9
Randomize
t2 = Int((100 - 1 + 1) * Rnd + 1)
List1.AddItem abc(CStr(t2), t)
Next t1

End Sub

Private Function abc(a As String, b() As String) As String
Dim i As Integer
Dim bol As Boolean
bol = False
For i = LBound(b) To UBound(b)
If b(i) = a Then
bol = True
Exit For
End If
Next
If bol = False Then
abc = a
Else
Randomize
abc = abc(CStr(Int((100 - 1 + 1) * Rnd + 1)), b)
End If
End Function

2007-07-03 14:48
寻找
Rank: 2
等 级:论坛游民
帖 子:132
专家分:19
注 册:2007-3-2
得分:0 
以下是引用随风逐流在2007-7-3 14:56:28的发言:
CStr是转换成string类型
LBound(b)是数组上标
UBound(b)是数组下标

你应该把MSDN装上

谢谢~哦,明白了,朋友说的MSDN是什么?是查找函数的东东么?
因为VB是初学,还需要很多高手朋友的帮忙指正~谢谢!

2007-07-03 15:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-152311-1-1.html




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

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