Project1

标题: 随机生成序列数的最简办法 [打印本页]

作者: SailCat    时间: 2006-10-18 23:25
标题: 随机生成序列数的最简办法
思路:将一个顺序的数组[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    时间: 2006-10-18 23:25
标题: 随机生成序列数的最简办法
思路:将一个顺序的数组[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]

作者: 轮回者    时间: 2006-10-19 04:20
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}
作者: chaochao    时间: 2006-12-23 13:17
以下引用轮回者于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
作者: 六脉神剑    时间: 2006-12-23 13:47
以下引用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

作者: chaochao    时间: 2006-12-27 06:30
失误失误,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的数组了...
作者: 九泪    时间: 2006-12-27 20:11
猫子换头像了~ {/hx}
作者: 柳柳    时间: 2006-12-28 03:11
以下引用九泪于2006-12-27 12:11:18的发言:

猫子换头像了~  

带头灌水啊你~
其实她没换,只是默认的头像换了……
作者: 莫浪语    时间: 2006-12-28 05:54
以下引用九泪于2006-12-27 12:11:18的发言:

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


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

猫子换头像了~  


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

我都遇过她好多次了,{/cy}




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1