找回密码
 加入
搜索
查看: 4444|回复: 12

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

 火.. [复制链接]
发表于 2009-12-20 20:08:58 | 显示全部楼层 |阅读模式
如题:
用$j=Random(1,100,1)得出的随机数会在1~100,

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

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

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

请高手指点~~~

评分

参与人数 1金钱 -10 收起 理由
afan -10

查看全部评分

发表于 2009-12-20 20:23:19 | 显示全部楼层
本帖最后由 pusofalse 于 2009-12-20 22:43 编辑

首先生成1-100这个数列,然后乱序排列,从头至尾输出。
#include <Array.au3>

Local $aNum[100]
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[2])
Next
发表于 2009-12-21 08:46:42 | 显示全部楼层
本帖最后由 水木子 于 2009-12-21 09:07 编辑

呵呵!学习啦!
发表于 2009-12-21 10:50:39 | 显示全部楼层
把已经选到的数挑选出来, 然后再剩下的数中随机
#include <array.au3>
Local $aNum[100]
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)

评分

参与人数 1金钱 +20 收起 理由
pusofalse + 20 学习了。

查看全部评分

发表于 2009-12-21 11:22:53 | 显示全部楼层
本帖最后由 C.L 于 2009-12-21 22:29 编辑

看错题目了,重做一个,不过效率没上面两位老大的代码高:
Dim $atemp[100]
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
 楼主| 发表于 2009-12-21 14:08:17 | 显示全部楼层
很好很强大,多谢各位.

但是,楼上贴没看太明白,仁兄可赐教否?
发表于 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



    没搞清楚Lz的意思,很显然....
发表于 2009-12-21 14:23:10 | 显示全部楼层
5#代码确实会有重复
发表于 2009-12-27 23:31:23 | 显示全部楼层
帮助里应该有例子吧。
发表于 2009-12-28 10:37:51 | 显示全部楼层
#include <array.au3>
$N = 50 ;选取次数
Dim $X[2]
$X[0] = $N
$X[1] = 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[UBound($X) + 1]
                        $X[UBound($X) - 1] = $j
                        ExitLoop
                Else
                        $is = False
                EndIf
        WEnd
Next
_ArraySort($X, 0, 1)
_ArrayDisplay($X)
发表于 2009-12-28 11:42:25 | 显示全部楼层
回复 1# ylilike


   这么多答案,LZ还不修改标题分类可就要扣分了~
发表于 2010-4-6 00:52:44 | 显示全部楼层
厉害,顶一个
发表于 2010-9-6 01:02:50 | 显示全部楼层
都是大牛顶下了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-3 08:28 , Processed in 0.138686 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表