回 帖 发 新 帖 刷新版面

主题:[原创]大过年的,大家都对QB兴趣不浓,给一个好的题目,都进来看看■■■■■■■■■■■■■

求助 怎么搞一个随机排列的数组  
各位大哥,偶初学,多帮帮忙 
比如把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 楼

我和你同行,初学者!!这个问题我似乎在书上看过,我在找~~~你等我答复!
[em2][em2][em2][em2][em2][em2][em2]

22 楼

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 楼

[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 楼

[quote]moz:   你的方法基本算是套用俺的,交换部分换成了单个的函数,而且交换过程与循环量i无关,当然循环越多越好,可是我的交换是数组下标与i有关并逐个与随机的另一个数据交换的过程,所以循环一周足以。
呵呵,等待更好的方法[/quote]
你太小看MOZ了,他很强的,呵呵,有一种简单明了的办法为什么要弄那么多乱七八糟的出来?MOZ写的这个也只是循环一周啊,你认为这个是循环几周呢??

25 楼

[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 楼

moz 的还是有问题,如果,假设,它每次的值都一样,哪不麻烦吗!(我知道这中可能性很小)

27 楼

MOZ可能太忙了,没有看好我写的,也可能他写错了,不过必竟是高手,我委佩服的,我的交换部分,原来可以用一个语句完成.....

28 楼

又忙又不忙
只是我找不到有什么好说的
多想想有些什么样的可能性

用i和某个位置对换,也就是把每一个数都对换一次,但也不能排除重复对换换回来的,也不能保证a(50)就非得不是50才算得上是乱
同样道理,两个随机位置对换,也很有可能漏掉某个(些)位置。

只是,跟问题跟结果都没有必然的影响的,这些事情,我都想不出来有讨论的必要。

29 楼

真没必要

30 楼

19楼的moz:rnd前要加int吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册