• ベストアンサー

C言語での乱数の生成方法

C++のプログラミングで質問があります。 1~8の数字の中で"違う"数字を4つ発生させたいのですが、どのように組めばいいのか分かりません。 回答をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

  1)配列に 1 から 8 の数字を入れる。 2)それをランダムにシャッフルする。 3)先頭の 4つ を取り出す。  

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

重複なく乱数を生成するのは for (i = 0; i < n; ++i) { data[i] = i; } for (i = n; i > 0; --i) { int p = (0以上 i未満の乱数); int t = data[p]; data[p] = data[i]: data[i] = data[p]; } とするのがよくあるパターン.

回答No.2

違う数字ということにこだわらなければ、1~8の乱数は発生できるのでしょうか? それでしたら、 bool hit[8]; のような配列を準備して、 for(i = 0; i < 8; i++) hit[i] = false; で、全部の数字を出てないことにして、 for(int i = 0; i < 4;) { int n = (1~8の乱数を一個発生); if (hit[n - 1]) { // この数字は既に出てしまっている contineu; // だから、次の数字を探す } else { // この数字はまだ出ていない hit[n - 1] = true; // この数字が出てきたと印をつける n を使う } } こんな感じで。 あと、ちょっと大鉈な気もしますが、STL を使うと、 #include <algorithm> int a[] = {1, 2, 3, 4, 5, 6, 7, 8}; std::random_shuffle(&a[0], &a[8]); で、a[] の中身がランダムに入れ替わるので、先頭の4個を使えばいいかと。 ただ、この場合、実行する度に同じ結果になりますが。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

関連するQ&A