如何讓亂數產生4個不重複整數??

請問一下~要如何利用亂數產生4個整數,而且這4個數不能重複呢?

謝謝~![](upload://wh1Jr0invKZTARRL2Hqlvc8do63.gif)

很簡單,就照以下步驟:

1.) 用亂數產生器產生4個亂數
2.) 將產生的亂數改為整數
3.) 檢查這4個整數有沒有重複
4.) 沒重複就輸出,有重複就回到 1.)

看吧,真的很簡單吧~ 哈哈

感謝大大指導

另外請問一下~有那種元件可以一次比較多個數是否有重複.

還是只能用布林比較呢?

各位大大

我的問題比較笨

如何把產的的0~1的亂數(骰子)變成整數,如果我又要限制在10~50的亂數又有如何產生,

如可再來比對,這41個數不會重複產生

 

以下是vb的寫法

提供你一個公式, 不過我不希望你用背的, 盡量能夠自己去了解公式的意思

亂數 = Int(Rnd*M)+N

M : 代表你要產生的亂數範圍內有幾個整數
      例如你想產生 1-52 之間的整數亂數, 那麼 M 就是 52
      如果你想產生 0-100 之間的整數亂數, 那麼 M 就是 101
N : 你想要產生的亂數的最小值
      同上例, 你想要產生 1-52 之間的亂數, 最小值就是1, 所以亂數式應寫為 Int(Rnd*52)+1

      如果要產生 100 - 200 之間的亂數, 亂數式應為 Int(Rnd*101)+100
      100 - 200 之間共有 101 個整數, 所以要乘以 101
      100 - 200 之間最小的數為 100,  所以最後要加 100

[QUOTE=Buu]

各位大大

我的問題比較笨

如何把產的的0~1的亂數(骰子)變成整數,如果我又要限制在10~50的亂數又有如何產生,

如可再來比對,這41個數不會重複產生

[/QUOTE]

提供另一個想法...反推法

當一個問題看起來很複雜時(或說看不出直接關係時)..如何將一個(複雜)問題,

變成"簡單"的問題(或說小問題)...當解決所有"簡單"的問題時,原本的問題就完成了.

首先就你所了解:1. 0~1的亂數(骰子) ,小弟記憶中,亂數好像是 0 <= Rnd < 1.

     ( Rnd亂數(Random),不包含1,但是否包含0,不太記得了...)

而最後的結果為: 1. 10 ~ 50, 10<=X<=50 (問題中,說明了有41個數,所以包含"等於")

基本知識:(相信大家都有這個能力,寫出來只是告訴大家,其實大家都有能力解決問題...)

1. 加減乘除 +, - , * , /

2. 取整數 int

反推法

1. 沒有直接的函數可以產生我們所要的結果, 10 ~ 50 , (10 <= X < 50)

2. 想法A, 如果改成 0~40然後再加 10, (10-10<=X-10<=50-10) 可不可行.....

   想法B,是否有 0~40的亂數函數...沒有,但已知有 0<=R<1的亂數,可不可以.....

   C, 好像可以歐.... 0 * K <= R * K < 1* K, 令 K = 40

   D, 0 <= R * 40 < 40 , 然後取整數 int(0) <= int(R*40) < int (40)

   E,可行是可行,但差了一點點,我們要 0<= X <= 40 , 要小於等於40

   F,比較D,E步驟... int(0) <= int(R* 40) < int(40), 對於int而言,0與40則不變

   表示 int(R*40)的可能值為 0,1,2,3,....39 (不包含40),但我們要的是包含40...怎麼辦..

   G,在看一次所有步驟,我們發現我們令K=40,我們得到 0,1,2,..39,

       我們令K=41,是否會得到 0,1,2,3,...40 我們所要的呢?

   H,令K=41, 重複C步驟.... 0 * 41 <= R *41 < 1 * 41

   I, int (0) <= int(R *41) < int(41),得 int (R * 41) 其值為 0,1,2,...40

       可改為 0 <= int (R *41) <= 40 (含等於)

   J, 若再上10, 則為 0 + 10 <= int(R * 41 ) + 10 <= 40 + 10

      10 <= int ( R * 41 ) + 10 <= 50

      整理: 如何適用產生任意區間的亂數

      設最大值為Max, 最小值為 Min,則  Min <= int( R * M) + N <=Max

      以上例最小值為10(包含), 最大值為 50(包含),則 int (R * 41) + 10,則可修改為

      M = Max - Min + 1, N = Min , int ( R * (Max-Min+1)) + Min

      總結: 很多問題,大家都有能力可以解決,以上例,只需基本的+,-,*,/,及取整數(int),

      當然還要有勇於錯誤嚐試的精神....相信很多問題都可以解決

      若有錯誤敬請指教.......