ylilike 发表于 2009-12-20 20:08:58

怎样才能得到随机数不重复?

如题:
用$j=Random(1,100,1)得出的随机数会在1~100,

别的数字未出现,而个别的数字却可能出现多次!

那么,怎么样可以让从1~100中的随机出现一次而不

重复,做到每个数字都有表达的机会呢?

请高手指点~~~

pusofalse 发表于 2009-12-20 20:23:19

本帖最后由 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 08:46:42

本帖最后由 水木子 于 2009-12-21 09:07 编辑

呵呵!学习啦!:face (20):

gapkiller 发表于 2009-12-21 10:50:39

把已经选到的数挑选出来, 然后再剩下的数中随机#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 11:22:53

本帖最后由 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

ylilike 发表于 2009-12-21 14:08:17

很好很强大,多谢各位.

但是,楼上贴没看太明白,仁兄可赐教否?

gapkiller 发表于 2009-12-21 14:14:17

$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的意思,很显然....

afan 发表于 2009-12-21 14:23:10

5#代码确实会有重复

8772602 发表于 2009-12-27 23:31:23

帮助里应该有例子吧。

顽固不化 发表于 2009-12-28 10:37:51

#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)

afan 发表于 2009-12-28 11:42:25

回复 1# ylilike


   这么多答案,LZ还不修改标题分类可就要扣分了~

binghc 发表于 2010-4-6 00:52:44

厉害,顶一个

qq54222717 发表于 2010-9-6 01:02:50

都是大牛顶下了
页: [1]
查看完整版本: 怎样才能得到随机数不重复?