查看: 3250|回复: 8

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

  [复制链接]

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2006-10-18 23:25:40 | 显示全部楼层 |阅读模式

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

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

×
思路:将一个顺序的数组[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] 到本站一游。

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

发表于 2006-10-18 23:25:40 | 显示全部楼层 |阅读模式

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

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

×
思路:将一个顺序的数组[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] 到本站一游。

逃兵

发表于 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
回复

使用道具 举报

CHAOS

梦石
0
星屑
92
在线时间
244 小时
注册时间
2005-11-4
回帖
3418

贵宾

发表于 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
梦想世界,在你伸手!
回复

使用道具 举报

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

贵宾

发表于 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
回复

使用道具 举报

CHAOS

梦石
0
星屑
92
在线时间
244 小时
注册时间
2005-11-4
回帖
3418

贵宾

发表于 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的数组了...
梦想世界,在你伸手!
回复

使用道具 举报

NewS-

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

贵宾

发表于 2006-12-27 20:11:18 | 显示全部楼层
猫子换头像了~ {/hx}
66RPG,这几个简单字符,之于我代表了什么?泪泪博客:http://hi.baidu.com/rpgmakerxp
回复

使用道具 举报

66RPG站长

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

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

发表于 2006-12-28 03:11:30 | 显示全部楼层
以下引用九泪于2006-12-27 12:11:18的发言:

猫子换头像了~  

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

使用道具 举报

本尊<

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

贵宾

发表于 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}
黑羽毛
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部