2

特定の乱数を除いて、どうすれば一意の乱数を生成できるのか疑問に思っていました。たとえば、 range1 to 10 except from 3で数値を生成したい場合、出力は次のようになります。

7 6 1 2 4 9 5 8 10
4

6 に答える 6

4

1 から 10 までの数字をシャッフルし、3 を取り除きます。

シャッフルの前後に 3 を削除しても問題ありません。

または、1 ~ 9 の数字をシャッフルして、3 を 10 に変更します。

バイアスのないシャッフルには、たとえば Fisher-Yates アルゴリズムを使用できます。http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

于 2013-09-18T14:27:13.083 に答える
2

1 ~ 9 の範囲で乱数を生成し、その数が 3 以上の場合は 1 を追加します。

于 2013-09-18T14:24:42.003 に答える
0

これが私の答えです - 「除く」を除いて、[最小、最大)でランダムな値を返します。

int myrand(int min, int max, int except) {
   int rc;
   do {
      rc = min + rand() % (max - min); 
   } while(rc == except);
   return rc;
}
于 2013-09-18T14:36:37.363 に答える