2014-01-24 200 views
0

所以我有點卡在這一個。我一直在努力尋找幾個小時,但我還沒有找到一個適合我的教授非常嚴格的參數的解決方案。用隨機排列填充數組

我必須用0-9的數字隨機排列填充數組,並且它們不能重複。我知道有很多這方面的話題,我已經找到了一些方法來做到這一點,但它不符合我們的要求。

所以我必須使用一個常規數組和一個給定種子的Random對象來填充具有唯一值的數組。我不能使用集合,ArrayLists,任何類型的迭代器,只是普通的循環。我甚至無法創建另一個類來執行此功能。
我的基本想法至今

for(int i=1; i<numItems; i++) 
    { 
     int count = 1; 
     int m=rand.nextInt(numItems); 
     for(int j=0; j<i; j++) 
     { 
      if(m==permutation[j]) 
      { 
       m=rand.nextInt(numItems); 
       count++; 
       j=-1; 
      } 
     } 
     permutation[i]=m; 
     numAttempts[i]=count;  
    } 

而這個作品完美,但我們不能修改環路內的控制變量(J)。

我基本上希望它從頭開始測試rand對象隨機生成的隨機數,如果語句是真的。

任何幫助,非常感謝。

編輯:他的產量enter image description here

+1

最簡單的解決方案是用獨特的值(簡單)填充數組,然後對其內容進行公平的洗牌。這避免了必須跟蹤哪些值尚未被看到,因爲它開始是獨特的,並且在每個混洗步驟之後仍然是唯一的。 – keshlam

+0

我無法洗牌。它必須是一致的輸出,並且必須看起來完全像他的,不使用隨機播放。 – user3092589

+0

你是什麼意思,它必須看起來完全像他?用相同的隨機種子進行混洗將是一致的。 – Blorgbeard

回答

0

所以看所需的輸出,你的算法應該是:

對於每一個數字我,挑隨機數,直到你得到一個你沒有挑已。然後把這個數字放在數組中,並記錄在獲得新數字之前必須選擇的數字。

因此,重構你的代碼一點點,而不是使用重置循環j -1:

for(int i=1; i<numItems; i++) 
{ 
    int count = 0; 
    bool found = false; 
    do { 
     int m=rand.nextInt(numItems); 
     count++; 
     for(int j=0; j<i; j++) 
     { 
      if(m==permutation[j]) 
      {     
       found = true; 
       break; 
      } 
     } 
    } while (found); 
    permutation[i]=m; 
    numAttempts[i]=count;  
} 

(我的Java是生鏽的,這句法可能是錯的,但我希望你能想法)

+0

這正是我所期待的,我想!一個do-while循環,我以前無法用頭包裹它。 – user3092589

+0

我認爲你的意思是'while(!found)'。除此之外...是的,這似乎是他所要求的。我仍然認爲對於所述問題來說這是一個可怕的解決方案,但是如果目標是證明隨着表格的填充,逐漸難以找到尚未使用的價值(可能是爲了說明統計數據並說明爲什麼會這樣*是一個可怕的解決方案),它確實做到了。 – keshlam

+0

@keshlam從我這裏沒有任何爭論!但教授有非常非正統的做法。 – user3092589

0

看來,在這個例子中使用的算法是:

1. Draw number from PRNG 
2. Scan every previous entry in array to check if value is present 
3. If yes, go to 1 
4. Assign number to this entry 
5. Proceed to next entry 
6. Go to 1 

numAttempts似乎是數量重新繪製一條不得不爲每個條目作出。您可以通過不隨機繪製最後一個條目來優化他的實現,而只是利用n-1條目被分配後的事實,只有一個可能性爲n

+0

我不能洗牌,檢查他的輸出。 – user3092589

+0

@ user3092589請重新編寫您的問題,清楚說明所有要求。 – Superbest

+0

我編輯了我的帖子以添加要求,我的問題保持不變。我們做不了很多事情,所以很難全部記住它們。 – user3092589