2016-09-13 48 views
-1

我被要求創建一個唯一的(沒有兩個數字是相同的)隨機數集合 (用戶輸入行和列維度'd1'和' D2' )我需要幫助檢查二維數組中的重複整數

我完全失去了對如何兩個陣列中的每個元素比較,看它們是否是重複的。

(Max是要生成的最大值)

void RandomArray(IntArrayPtr* m, int d1, int d2, int max) 
{ 
for (int i = 0; i < d1; i++) 
{ 
    for (int j = 0; j < d2; j++) 
    { 
     m[i][j] = (rand() % max + 1); 
     if (i > 0 && j > 0) 
     { 
      if (m[i][j] == m[i][j - 1] || m[i][j] == m[i-1][j]) 
      { 
       m[i][j] = (rand() % max+ 1); 
      } 
     } 
    } 
    } 
} 
+0

你必須檢查全球unicity,而不是本地。並且畫出一個新的隨機數並不能保證即使是本地的unicity(可能和以前一樣) –

+0

什麼是m [i] [j] =(rand()%10 + 1);'about?在1到10的範圍內有多少*個不同的數字? –

+0

感謝您發現,它應該是(rand()%max + 1)。 –

回答

3

存放在C++數據結構稱爲unordered_set每一個值,並檢查隨機值產生存在於這一套與否。 https://stackoverflow.com/a/24644253/3326925

PS:我不是在C好++,但可以告訴你在Java中使用HashSet的涉及本

如何使用unordered_set參考。

+0

謝謝Shrikant!我讚賞 –

+0

嘿@JoshMorgan,如果你認爲它解決了你的問題,請接受我的答案。 –

0

另一種解決方案是產生一組n個隨機數的,使用類似的東西numbers.add(n + random())其中n是添加的最後一個號碼和random()是隨機增量(每次都不同)。

一旦你的設置,你可以用它std::random_shuffle(...)。並在矩陣上添加元素1。

+0

謝謝Ediolot!我會看看這是否有效。 –