最初に、これは不自然な例であり、現実の問題ではないことを明確にしておきます。
0〜10の乱数を作成する際に問題が発生した場合は、これを11回行い、以前に発生した番号が再度描画されないようにします。繰り返し番号を取得した場合は、別の乱数を作成して、以前は見られませんでした。したがって、基本的に、0から10までの一意の番号のシーケンスをランダムな順序で取得します(例:3 1 2 0 5 9 4 8 10 6 7など)。
ここで、乱数が一意であり、以前に描画したものではないことを確認するロジックを考え出すために、多くのアプローチを使用できます。
C ++std::bitset
を使用して、インデックスに対応するビットを各ランダム番号の値に等しく設定します。次回、新しい乱数が描画されたときに確認します。
または
aを使用しstd::map<int,int>
て、回数をカウントするか、その配列にいくつかの番兵値が格納されている単純なC配列でさえ、その数が発生したかどうかを示します。
上記の方法を避け、数学的/論理的/ビット単位の演算を使用して、以前に乱数が描画されたかどうかを確認する必要がある場合、方法はありますか?