主题:[原创]大过年的,大家都对QB兴趣不浓,给一个好的题目,都进来看看■■■■■■■■■■■■■
wjl8719
[专家分:190] 发布于 2009-01-23 00:23:00
求助 怎么搞一个随机排列的数组
各位大哥,偶初学,多帮帮忙
比如把1、2、3、……100随机乱排成 45、7、8、……再依次放进数组A(100)里面
我现在就只会用循环比如(只是思路,语法不一定对)
……
40 FOR I=1 TO 100
50 A(I)=INT(RND(1)*100)
60 FOR X=1 TO I-1
70 IF A(I)=A(X) THEN GOTO 50
80 NEXT
90 NEXT
……
要是数字很多的话就要循环很久了
有没有更好的方法呢
------------------------------------------------------------------------------
分割线以上是我复制过来的,不用上面那种方法,大家思考一 下,看以大家的智慧能得几种方法
我是思考半天才想出一种来,等过完年我把我的再发出来.
多多亦善
[em3][em3][em3][em3]
回复列表 (共40个回复)
11 楼
我是QB爱好者 [专家分:250] 发布于 2009-02-13 13:35:00
机灵点,拜托!
12 楼
wjl8719 [专家分:190] 发布于 2009-02-16 10:12:00
[em3]很好,呵呵,指出我的错误了
13 楼
wjl8719 [专家分:190] 发布于 2009-02-16 10:14:00
[quote]还有问题,就是如果下标一样,那么就白交换了,最还加一句
dim a(100)
for i=1 to 100
a(i)=i
next i
for i=1 to 100
o=a(i)
10 h=int(rnd*100+1)
if h=i then 10
a(i)=a(h)
a(h)=o
next i
这是改进的。(这种方法不太好)[/quote]
h=i就不行了吗,你再想想,h=i本身也是一种可能,再说:当i量增加之后,之前的任意一个量都可能再次交换的
14 楼
wjl8719 [专家分:190] 发布于 2009-02-16 10:16:00
[quote]不知道你需要的随机数范围是多少,以1-100为例吧
randomize timer
dim a(100)
for i=1 to 100
a(i)=int(rnd*100)+1
next i
end
[/quote]
你就没理解题意啊,不能重复的
15 楼
阿木Lee [专家分:80] 发布于 2009-02-16 20:41:00
关注中~~~啦~啦~啦
我早就想问这问题了……我不会其它方法了,等高人指点
16 楼
wjl8719 [专家分:190] 发布于 2009-02-20 23:39:00
这个方法是我想出来的,不过,我也是在等待新的方法
17 楼
阿木Lee [专家分:80] 发布于 2009-02-21 18:29:00
moz和其他英雄们就没来过这里么,他们没什么好的建议???
谁有谁贴上啊,算是急用了,我在编个随机字典生成程序,在使用穷举呢,效率很低,谁给个好方法……
18 楼
wjl8719 [专家分:190] 发布于 2009-02-22 08:33:00
呵呵,大侠忙呢,没空来看看
19 楼
moz [专家分:37620] 发布于 2009-02-22 09:19:00
dim a(100)
for i=1 to 100
a(i)=i
next
for i=1 to 100 '交换次数可以改大些,次数越多,次序越乱
swap a(rnd*99+1),a(rnd*99+1)
next
20 楼
wjl8719 [专家分:190] 发布于 2009-02-25 08:15:00
moz: 你的方法基本算是套用俺的,交换部分换成了单个的函数,而且交换过程与循环量i无关,当然循环越多越好,可是我的交换是数组下标与i有关并逐个与随机的另一个数据交换的过程,所以循环一周足以。
呵呵,等待更好的方法
我来回复