找回密码
 加入
搜索
楼主: bilinyee

[效率算法] 从 1-100 中 随机抽取10个不重复 数字

 火... [复制链接]
发表于 2012-11-29 16:39:00 | 显示全部楼层
高手还真多·
发表于 2012-12-2 12:56:49 | 显示全部楼层
回复 16# 3mile


这个简洁明了实用啊。
发表于 2012-12-3 19:52:42 | 显示全部楼层
话说P版的话真是好精辟!!  赞同P版



#include <Array.au3>

Local $iNum = 0
Local $aArray[10]
For $a = 1 To 10
        $iNum += 10
        $aArray[$a - 1] = Random($iNum - 9, $iNum, 1)
Next
_ArrayDisplay($aArray)
Exit

发表于 2012-12-3 21:33:17 | 显示全部楼层
回复 19# Qokelate
这个确实是100内的但应该是平均的吧,没有随机的意思,每10个数内一个吧
发表于 2012-12-3 21:57:22 | 显示全部楼层
回复 20# netegg


    正如P版所说,本来就是伪随机,我个人认为无所谓了
发表于 2012-12-3 22:37:06 | 显示全部楼层
学习了不少方法,不过看来真正的随机无法以很简单的几句代码实现
发表于 2012-12-3 22:43:26 | 显示全部楼层
本帖最后由 netegg 于 2012-12-4 02:25 编辑

回复 21# Qokelate
伪随机不错,但你这个已经是统计学上的平均分布了,和伪随机是两码事了。尽管在样本足够大的时候,随机确实会呈现统计学意义上的平均分布
另外,如楼主所描述的要求,即使是10个数的随机排列,一共有10!种排列方式,用这个计算的话只有10×10种排列方式
p版那个我没明白是什么意思,不过,估计是猜测楼主到底想要干什么,如果是的话,倒确实是。
不知道p版如果在绘制fractal图形的时候会不会采用同样的做法
发表于 2012-12-4 13:36:00 | 显示全部楼层
$z = TimerInit()
$a = ""
For $i = 1 To 100        
$a &= $i&"|"        
Next

$b = ""
For $i =1 To 10
$c = StringSplit($a,"|")
$d = Random(1,101-$i,1)
$b &= $c[$d] & "|"        
$c = StringReplace($a,$c[$d]&"|","")        
Next

MsgBox(0,TimerDiff($z),$b)
发表于 2012-12-5 15:40:23 | 显示全部楼层
每个人的思路都不太一样啊,我的思路是在一个数组中放入1-100这100个数,然后“随机”取出不放回的思路。
#include <array.au3>

Dim $num[100], $new[10], $n

For $i = 0 To 99
        $num[$i] = $i + 1
Next

For $i = 0 To 9
        $n = Random(0, UBound($num) - 1, 1)
        $new[$i] = $num[$n]
        _ArrayDelete($num, $n)
Next

_ArrayDisplay($new)
发表于 2012-12-5 16:11:14 | 显示全部楼层
本帖最后由 netegg 于 2012-12-5 16:12 编辑

回复 25# haijie1223
没什么区别,不过把自然数先放到数组里罢了,和直接操作数字没区别
而且这样还是自然数序,本身就限制了
发表于 2012-12-14 10:25:25 | 显示全部楼层
这东西没有最好只有最合适
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 12:08 , Processed in 0.063261 second(s), 13 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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