主题:[原创]大过年的,大家都对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个回复)
21 楼
冰冻小企鹅 [专家分:190] 发布于 2009-02-26 19:36:00
我和你同行,初学者!!这个问题我似乎在书上看过,我在找~~~你等我答复!
[em2][em2][em2][em2][em2][em2][em2]
22 楼
花落無声 [专家分:20] 发布于 2009-02-26 19:56:00
dim a(100)
i=1
a(1)=int(rnd*100+1)
do
i=i+1
a(i)=int(rnd*100)+1
do
j=j+1
if i=j then i=i-1
loop until j=i-1
loop until i=100
for i=1 to 100
print a(i);
next
23 楼
wjl8719 [专家分:190] 发布于 2009-02-27 18:32:00
[quote]dim a(100)
i=1
a(1)=int(rnd*100+1)
do
i=i+1
a(i)=int(rnd*100)+1
do
j=j+1
if i=j then i=i-1
loop until j=i-1
loop until i=100
for i=1 to 100
print a(i);
next
[/quote]
把for换成了do,可是,if语句中不能正确判断是否重复过啊,美女!
呵呵
dim a(100)
for i=1 to 100
a(i)=i
next
for i=1 to 100
o=a(i)
h=int(rnd(100))+1
a(i)=a(h)
a(h)=o
next
这是我做的,绝对是正确的,只是在等待别的有新意的方法
[em11][em11][em11][em11][em11][em11][em11][em11][em11][em11]
24 楼
强强 [专家分:4740] 发布于 2009-02-28 15:52:00
[quote]moz: 你的方法基本算是套用俺的,交换部分换成了单个的函数,而且交换过程与循环量i无关,当然循环越多越好,可是我的交换是数组下标与i有关并逐个与随机的另一个数据交换的过程,所以循环一周足以。
呵呵,等待更好的方法[/quote]
你太小看MOZ了,他很强的,呵呵,有一种简单明了的办法为什么要弄那么多乱七八糟的出来?MOZ写的这个也只是循环一周啊,你认为这个是循环几周呢??
25 楼
wjl8719 [专家分:190] 发布于 2009-03-04 16:40:00
[quote]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[/quote]
MOZ的:
for i=1 to 100 '交换次数可以改大些,次数越多,次序越乱
swap a(rnd*99+1),a(rnd*99+1)
next
我的:
for i=1 to 100
o=a(i)
h=int(rnd(100))+1
a(i)=a(h)
a(h)=o
next
我的可以改成:
for i=1 to 100 '交换次数100次足矣
swap a(i),a(rnd*99+1)
next
26 楼
天天和和 [专家分:1420] 发布于 2009-03-05 23:28:00
moz 的还是有问题,如果,假设,它每次的值都一样,哪不麻烦吗!(我知道这中可能性很小)
27 楼
wjl8719 [专家分:190] 发布于 2009-03-06 18:38:00
MOZ可能太忙了,没有看好我写的,也可能他写错了,不过必竟是高手,我委佩服的,我的交换部分,原来可以用一个语句完成.....
28 楼
moz [专家分:37620] 发布于 2009-03-06 21:04:00
又忙又不忙
只是我找不到有什么好说的
多想想有些什么样的可能性
用i和某个位置对换,也就是把每一个数都对换一次,但也不能排除重复对换换回来的,也不能保证a(50)就非得不是50才算得上是乱
同样道理,两个随机位置对换,也很有可能漏掉某个(些)位置。
只是,跟问题跟结果都没有必然的影响的,这些事情,我都想不出来有讨论的必要。
29 楼
wjl8719 [专家分:190] 发布于 2009-03-08 10:09:00
真没必要
30 楼
oqoq [专家分:130] 发布于 2009-05-10 15:54:00
19楼的moz:rnd前要加int吧
我来回复