主题:要在1-10之间找4个不重复的随机数。请教!
yucom4011
[专家分:50] 发布于 2003-01-23 09:39:00
在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 楼
爱编程 [专家分:20] 发布于 2003-03-08 14:51:00
你是用家里的电脑上网的话,发言后,打开,把该页放进收藏夹就好办了!
12 楼
爱编程 [专家分:20] 发布于 2003-03-08 15:22:00
建立一个WORD文档,把你的发言的标题写入word中,发言后,打开你的发言,然后把地址栏中的地址复制到标题后面。下次上网时,只要单击该地址就可以了。
13 楼
爱编程 [专家分:20] 发布于 2003-03-13 13:44:00
是本论坛吗,登陆后,上面不是有一个“我的帖子”吗?单击打开就行了。
14 楼
z.xh [专家分:670] 发布于 2003-03-19 11:14:00
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 楼
ryowu [专家分:6470] 发布于 2003-05-01 23:16:00
楼上的就是那种慢的方法.
上面已经有人说了一种比较好的.
建立一个数组a(10),建立总数量标志cnt,首先在10个数中抽取一个随机数,然后从那个位置起一次将后面的前移,然后总数量标志-1,然后下次就在cnt中抽取随机数就可以了.
这样就不会出现重复了.
16 楼
雾风 [专家分:0] 发布于 2003-06-22 20:04:00
我觉得楼上说的有点问题
如果那样的话,对总数量标志的处理会比较麻烦,因为你还要先去确定提取出来的数组元素的具体位置,而且还要进行移动,速度会比较慢
我有一个方法,如果你要提4个的话,就建一个a(3)的数组,把前几次得出的结果保存在那个数组中,然后用新的随机数和数组中的比较应该就可以了
如有说错,请更正
17 楼
雾风 [专家分:0] 发布于 2003-06-22 20:20:00
更正: 应该用a(4)数组,这样便于保存
18 楼
爱编程 [专家分:20] 发布于 2003-08-20 23:00:00
你是不是想做彩票选号码程序啊,我看到一个用DELPHI编的,用集合的办法
19 楼
popwind [专家分:0] 发布于 2003-10-08 17:05:00
'交换法应该是很快的(附代码)
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 楼
lory [专家分:10] 发布于 2004-05-19 11:06:00
不知道这个可以不:
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
我来回复