作者idicivik ( 苦海钓叟)
看板C_and_CPP
标题Re: [问题] 乱数的问题
时间Fri Apr 7 12:21:43 2006
我提供一点我做不重覆的乱数的作法
首先你的范围 是0到9 给个array 放这10个 int num[i] = i for i = 0 to 9
先订一个pt 是代表我们还可以取的个数 - 1(因为 我们的array 是从0开始的)
所以一开始当然是 pt = 9
而我们可以用 取乱数的方式得到一个 0 到pt 的乱数吧
取到之後 假设是 n 作 swap(num[n],num[pt]) pt-- 则
我们第一个选到的数字就会跑到最後一格去
而 如果我们再做一次取0 到pt 的乱数时
num[0] 到 num[pt] 就一定是我们没选过的数字
所以这时候选到的数字当然是又乱又不会重覆了
(你要选出几个不重覆的 就跑几圈就是了)
当然 如果pt = -1 时 代表你已经选了10个乱数了 再选一定会重覆
而我们的目的是不重覆 所以当然 不会从10个数字选出 11个不重覆的 (也办不到)
而这种方法 也可以用在 你有一个set 个个都不一样 选出random不重覆的几个
只要给好 num[0] 到 num[个数-1] 的内容就好( 当然 不一定要int 可以是其他的)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.50.171
1F:推 sunkill:不错 推 04/07 16:49