none
如何產生10個不同的亂數

    問題

  •  

    我是1 ~ 50 取 10 亂數

    for i=1 to 10

      a(i)=int(rnd()*49))+1

    next

      再判斷10個亂數中是否有重複

     if  有重複  then

        重新讀取亂數

    end if

    寫法試了很多方法,好像在網頁不能使用遞迴

    會出現超過堆疊的錯誤訊息

    不曉得各位前輩是否有遇過此類問題呢?不知如何解決的,可否告知解決方法,謝謝!

     

    2006年3月9日 下午 01:09

解答

  • 網頁裡是可以使用遞迴, 但你的演算法有可能造成無限次的遞迴, 這個問題應採用"洗牌"的演算法。

    1. 先準備一個 50 個數的的陣列, 將 1 ~ 50 依序填滿陣列

    2. 亂數取 1 ~ 50, 得到的數字 n1, 將陣列中的 A(n1) 與陣列的第1個值互換

    3. 亂數取 2 ~ 50, 得到的數字 n2, 將陣列中的 A(n2) 與陣列的第2個值互換

    4. 後面 3 ~ 10 的數字依同樣的方法找出來, 陣列中前 10 個數字就是答案

    2006年3月10日 上午 02:56

所有回覆

  • 網頁裡是可以使用遞迴, 但你的演算法有可能造成無限次的遞迴, 這個問題應採用"洗牌"的演算法。

    1. 先準備一個 50 個數的的陣列, 將 1 ~ 50 依序填滿陣列

    2. 亂數取 1 ~ 50, 得到的數字 n1, 將陣列中的 A(n1) 與陣列的第1個值互換

    3. 亂數取 2 ~ 50, 得到的數字 n2, 將陣列中的 A(n2) 與陣列的第2個值互換

    4. 後面 3 ~ 10 的數字依同樣的方法找出來, 陣列中前 10 個數字就是答案

    2006年3月10日 上午 02:56
  • 我以前有寫好,您可以直接拿去用

    http://www.allenkuo.com/forum/viewthread.asp?mid=942&

    2006年7月17日 上午 09:21