怎样才能得到随机数不重复?
如题:用$j=Random(1,100,1)得出的随机数会在1~100,
别的数字未出现,而个别的数字却可能出现多次!
那么,怎么样可以让从1~100中的随机出现一次而不
重复,做到每个数字都有表达的机会呢?
请高手指点~~~ 本帖最后由 pusofalse 于 2009-12-20 22:43 编辑
首先生成1-100这个数列,然后乱序排列,从头至尾输出。#include <Array.au3>
Local $aNum
For $i = 0 To 99
$aNum[$i] = Random(1, 100) & Random(200, 300) & Random(400, 500) & "," & ($i + 1)
Next
_Arraysort($aNum)
For $i = 0 To 99
$aVar = StringSplit($aNum[$i], ",")
Msgbox(0, '', $aVar)
Next
本帖最后由 水木子 于 2009-12-21 09:07 编辑
呵呵!学习啦!:face (20): 把已经选到的数挑选出来, 然后再剩下的数中随机#include <array.au3>
Local $aNum
For $i=0 To 99 ;-- 赋初值
$aNum[$i]=$i+1
Next
For $i=0 To 98 ;-- 重新排列
$r = Random($i,99,1)
$temp = $aNum[$i] ;-- 交换值
$aNum[$i] = $aNum[$r]
$aNum[$r] = $temp
Next
_ArrayDisplay($aNum) 本帖最后由 C.L 于 2009-12-21 22:29 编辑
看错题目了,重做一个,不过效率没上面两位老大的代码高:Dim $atemp
For $i = 0 To 99
$rand = Random(1, 100, 1)
If $i == 0 Then $atemp[$i] &= $rand
For $j = 0 To $i
If $rand == $atemp[$j] Then
$rand = Random(1, 100, 1)
$j = -1
ContinueLoop
EndIf
Next
$atemp[$i] = $rand
Next 很好很强大,多谢各位.
但是,楼上贴没看太明白,仁兄可赐教否? $timer= TimerInit ()
$temp = ""
for $i=1 To 100
SRandom(StringRight(Timerdiff($timer),2))
$ran ...
C.L 发表于 2009-12-21 11:22 http://www.autoitx.com/images/common/back.gif
没搞清楚Lz的意思,很显然.... 5#代码确实会有重复 帮助里应该有例子吧。 #include <array.au3>
$N = 50 ;选取次数
Dim $X
$X = $N
$X = Random(0, 99, 1)
For $i = 2 To $N
$max = UBound($X) - 1
$is = False
While 1
$j = Random(0, 99, 1)
For $o = 1 To $max
If $j = $X[$o] Then
$is = True
ExitLoop
EndIf
Next
If $is = False Then
ReDim $X
$X = $j
ExitLoop
Else
$is = False
EndIf
WEnd
Next
_ArraySort($X, 0, 1)
_ArrayDisplay($X) 回复 1# ylilike
这么多答案,LZ还不修改标题分类可就要扣分了~ 厉害,顶一个 都是大牛顶下了
页:
[1]