设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2613|回复: 8
打印 上一主题 下一主题

随机生成序列数的最简办法

 关闭 [复制链接]

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22472
在线时间
2336 小时
注册时间
2005-10-15
帖子
1160

开拓者

跳转到指定楼层
1
发表于 2006-10-18 23:25:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
思路:将一个顺序的数组[0,1,2,3,4,5....n]中的每一个数随机与其后的某一个数进行交换
然后获得交换后的数组

a = []
for i in 0...10
  a = i
end
for i in 0...9
  b = i + rand(10-i)
  unless b == i
    tmp = a
    a = a
    a = tmp
  end
end
p a

用这个办法可以引申:从一个顺序数组中取N(N小于数组长度)个数,每个互不相同。
n = 5
a = []
for i in 0...10
  a = i
end
for i in 0...n
  b = i + rand(10-i)
  unless b == i
    tmp = a
    a = a
    a = tmp
  end
end
p a[0...n]
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
22472
在线时间
2336 小时
注册时间
2005-10-15
帖子
1160

开拓者

2
 楼主| 发表于 2006-10-18 23:25:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
思路:将一个顺序的数组[0,1,2,3,4,5....n]中的每一个数随机与其后的某一个数进行交换
然后获得交换后的数组

a = []
for i in 0...10
  a = i
end
for i in 0...9
  b = i + rand(10-i)
  unless b == i
    tmp = a
    a = a
    a = tmp
  end
end
p a

用这个办法可以引申:从一个顺序数组中取N(N小于数组长度)个数,每个互不相同。
n = 5
a = []
for i in 0...10
  a = i
end
for i in 0...n
  b = i + rand(10-i)
  unless b == i
    tmp = a
    a = a
    a = tmp
  end
end
p a[0...n]
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。

Lv1.梦旅人

逃兵

3
发表于 2006-10-19 04:20:22 | 只看该作者
a = []
b = []
for i in 1..10
  a.push(i)
end
for i in 1..10
  j = rand(a.size) - 1
  b.push(a[j])
  a.delete_at(j)
end
p b

我的方法似乎麻烦了很多啊!{/cy}
「If you judge people, you have no time to love them.」—— Mother Teresa
回复 支持 反对

使用道具 举报

Lv1.梦旅人

CHAOS

梦石
0
星屑
64
在线时间
241 小时
注册时间
2005-11-4
帖子
3518

贵宾

4
发表于 2006-12-23 13:17:30 | 只看该作者
以下引用轮回者于2006-10-18 20:20:22的发言:

a = []
b = []
for i in 1..10
a.push(i)
end
for i in 1..10
j = rand(a.size) - 1
b.push(a[j])
a.delete_at(j)
end
p b

我的方法似乎麻烦了很多啊!


[本贴由作者于 2006-10-18 20:21:28 最后编辑]

恩,最简单的应该是这个方法.
arrayA = [1,2,3,4,5,......]
arrayB = []
for i in 0..arrayA.size
        pos = rand(arrayA.size-i)
        arrayB.push(arrayA[pos])
        arrayA.delete_at(pos)
end
梦想世界,在你伸手!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
7 小时
注册时间
2005-10-22
帖子
391

贵宾

5
发表于 2006-12-23 13:47:09 | 只看该作者
以下引用chaochao于2006-12-23 5:17:30的发言:
恩,最简单的应该是这个方法.
arrayA = [1,2,3,4,5,......]
arrayB = []
for i in 0..arrayA.size
   pos = rand(arrayA.size-i)
   arrayB.push(arrayA[pos])
   arrayA.delete_at(pos)
end

rand后面为什么要-1?rand生成的随机数不包含参数本身,-1后原来的数列中就少了最后一个。

arrayA = [1,2,3,4,5]
arrayB = []
for i in 0..arrayA.size - 1
   pos = rand(arrayA.size)
   arrayB.push(arrayA[pos])
   arrayA.delete_at(pos)
end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

CHAOS

梦石
0
星屑
64
在线时间
241 小时
注册时间
2005-11-4
帖子
3518

贵宾

6
发表于 2006-12-27 06:30:57 | 只看该作者
失误失误,FOR那边应该是3个点,而且arrayA.size不用减i
arrayA = [1,2,3,4,5]
arrayB = []
for i in 0...arrayA.size
  pos = rand(arrayA.size)
  arrayB.push(arrayA[pos])
  arrayA.delete_at(pos)
end

搞JAVA多了,都忘了RUBY的数组了...
梦想世界,在你伸手!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

NewS-

梦石
0
星屑
50
在线时间
5 小时
注册时间
2005-10-23
帖子
3651

贵宾

7
发表于 2006-12-27 20:11:18 | 只看该作者
猫子换头像了~ {/hx}
66RPG,这几个简单字符,之于我代表了什么?泪泪博客:http://hi.baidu.com/rpgmakerxp
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

8
发表于 2006-12-28 03:11:30 | 只看该作者
以下引用九泪于2006-12-27 12:11:18的发言:

猫子换头像了~  

带头灌水啊你~
其实她没换,只是默认的头像换了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

本尊<

梦石
0
星屑
50
在线时间
2 小时
注册时间
2006-11-21
帖子
799

贵宾

9
发表于 2006-12-28 05:54:10 | 只看该作者
以下引用九泪于2006-12-27 12:11:18的发言:

猫子换头像了~  
以下引用柳柳于2006-12-27 19:11:30的发言:


以下引用九泪于2006-12-27 12:11:18的发言:

猫子换头像了~  


带头灌水啊你~
其实她没换,只是默认的头像换了……

我都遇过她好多次了,{/cy}
黑羽毛
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-4 21:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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