2016-09-13 16 views
-1

乱数の一意の(2つの数字は同じではない)セットを作成するように頼まれました (行と列の次元 'd1'と ' d2 ')2次元配列で重複する整数をチェックする

両方の配列の各要素を比較して、それらが重複しているかどうかを確認する方法は完全に失われています。

(マックスが生成される最大値である)

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

ローカルではなく、グローバルにユニティシティをチェックする必要があります。新しい乱数を描画しても、局所的なユニティシティは保証されません。(前と同じになる可能性があります) –

+0

'm [i] [j] =(rand()%10 + 1); 1から10までの範囲内の*異なる番号がいくつありますか? –

+0

これは、(rand()%max + 1)となっています。 –

答えて

3

ストアunordered_setと呼ばれるC++データ構造内のすべての値と乱数値がこのセットに存在するか否生成かどうかを確認します。 unordered_setを使用する方法について

参考:https://stackoverflow.com/a/24644253/3326925

PS:私はCには良いことではないよ++が、Javaで使用HashSetのでこれを関連付けるためにあなたを伝えることができます。

+0

ありがとうShrikant!私は助けに感謝します –

+0

ちょっと@JoshMorgan、あなたの問題を解決したと思うなら私の答えを受け入れてください。 –

0

別の解決策は、nが最後の番号が追加されるとrandom()がランダムインクリメント(異なる各時間)であるnumbers.add(n + random())ようなものを用いて、N個の乱数のセットを生成しています。

セットを取得したら、std::random_shuffle(...)を使用できます。そして、行列に要素を1ずつ加える。

+0

ありがとうEdiolot!これがうまくいくかどうかわかります。 –

関連する問題