Re: [問題] 亂數的問題

看板C_and_CPP (C/C++)作者 ( 苦海釣叟)時間18年前 (2006/04/07 12:03), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/2 (看更多)
我提供一點我做不重覆的亂數的作法 首先你的範圍 是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

04/07 16:49, , 1F
不錯 推
04/07 16:49, 1F
文章代碼(AID): #14DUINuz (C_and_CPP)
文章代碼(AID): #14DUINuz (C_and_CPP)