- ベストアンサー
C++の乱数に関して
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やり方はいくつかありますが 一番シンプルなのは 最初に1~100の乱数を1ことり、配列に格納 二番目に、1~100の乱数を1ことり、 それが既に配列にあればもう一度取得しなおす 配列になければ配列に格納 三番目に、1~100の乱数を1ことり それが既に配列にあればもう一度取得しなおす 配列になければ配列に格納 他には 最初に1~100の数値を入れた配列を準備 取得するごとに消していく 他には 最初に1~100の乱数を1ことる 二番目に、1~99の乱数を1ことるが、最初にとったものより大きい場合は+1 三番目に、1~98の乱数を1ことるが、すでに取っているものと比べて1つより大きければ+1、2つより大きければ+2
その他の回答 (2)
- m-take0220
- ベストアンサー率60% (472/775)
要素数が100の配列を用意し、1~100の数字を入れる。 0~99の範囲の乱数N1を取得する。 配列の0番目とN1番目を入れ替える。 0~98の範囲の乱数N2を取得する。 配列の1番目とN2+1番目を入れ替える。 0~97の範囲の乱数N3を取得する。 配列の2番目とN3+2番目を入れ替える。 ... 0~(99-i)の範囲の乱数Niを取得する。 配列のi番目とNi+i番目を入れ替える。 ... とすれば、99回乱数を取得することで100個の数字の並びができます。
お礼
m-take0220さま、ご回答ありがとうございます。
- Tacosan
- ベストアンサー率23% (3656/15482)
std::random_shuffle
お礼
実は配列で作ってしまったのですが、 もしかして、これだけでできるんですか?
関連するQ&A
- 乱数に対して条件に合った値を返すには?
エクセル2010で 図のようにしたいです。 B列は乱数です。 C列はB列の乱数に応じて値を入力。 図のように セルB5が2の時は、3か4の値、 セルB6が4の時は、1~4の値を入れたいです。 この図例以外にも乱数に対して返したい値がたくさんあるため どのようにしたらいいのかわかりません。 IF関数を使うと思うのですがやり方がわかりません。 また、IF関数以外で「もっとシンプルにできるよ」という やり方があれば教えてください。 ご回答宜しくお願いします。
- 締切済み
- オフィス系ソフト
- 乱数ってなんですか?
なんどもすいません。配列のはなしなんですが、まずAという配列の中の0~10番目の中身をランダムに動かして、Bという配列に再編成させたいのですが、 乱数を使えば簡単になるよと知り合いにはいわれたのですが、乱数がどうゆうもの だかあまりよくわかりません。 自分は今VC++のMFCで作ってるのですが、乱数自体がわからないので教えてください。 それとこの方法でいくと日本語の時は配列を2個づつランダムに変えることになると思うのですが、それはぜんぜん予想もできません。教えていただけると助かります。お願いします。
- ベストアンサー
- C・C++・C#
- 乱数を使う
お世話になっております。 乱数についての質問なんですが、 なんと説明して良いのかわからないので例を挙げます。 コマンドボタンを三つ用意する。 コマンドボタン1をクリックすると、1~3までのランダムな値を表示する。 続けてコマンドボタン2をクリックすると、 先ほど表示した数字以外の1~3までの値を返す。 同様にコマンドボタン3をクリックすると最後に残った数字を表示する。 ってなことがやりたいんですが、 アドバイスお願いします。 あ、あとコマンドボタンを1回クリックすると もう2度とクリックできないようにするなんて事は出来るんですか?
- 締切済み
- Visual Basic
- C#の乱数取得について
C#の乱数取得について カテ違いですが、C#のカテゴリがないのでここで質問させていただきます。 C#の乱数取得について調べましたところ以下のプログラムサンプルを見つけました。 1| int seed = Environment.TickCount; 2| string s = ""; 3| 4| for (int i = 0; i < 10; i++){ 5| Random r = new Random(seed++); 6| for (int j = 0; j < 5; j++){ 7| s += r.Next(50).ToString("00") + " "; 8| } 9| s += Environment.NewLine; 10| } 11| this.textBox1.Text = s; C#は勉強し始めたばかりで、まだまだ知識不足なのでこのプログラムが理解できません。 今の自分の知識で考えたことは、 1行目、int型のseedに、C#の乱数を生成するときにデフォルトで設定されるseed値を格納。 2行目、stringクラスのsを定義。 5行目、Random型(?)rにseedを設定 7行目、わかりません。。乱数を取得してることはわかるのですが。 9行目、sに保持。 11行目、GUIに表示。 どなたか、詳しく解説していただけると助かります。 よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- 乱数を発生させるプログラムを教えてください。
タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。
- ベストアンサー
- C・C++・C#
- ある乱数生成法により,生成した最初の乱数の値は固定するか確かめて頂きた
ある乱数生成法により,生成した最初の乱数の値は固定するか確かめて頂きたいです. 0.0から1.0までの一様乱数を発生させる方法です. C言語のコードは以下に載せます. #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 float ran0(long *idum) { long k; float ans; *idum ^= MASK; k=(*idum)/IQ; *idum=IA*(*idum-k*IQ)-IR*k; if (*idum < 0) *idum += IM; ans=AM*(*idum); *idum ^= MASK; return ans; } この乱数生成法をBVAで,計算の中で繰り返し用いようとしています. idumを任意の整数値に設定・再設定すれば乱数列が初期化されると書いてあったため,idumの値を変えてみましたが,生成された乱数の最初の値は固定されたままでした. そこで,もともとこの乱数生成法がそのようになっているのかを教えて頂きたいです. よろしくお願いします.
- ベストアンサー
- その他(学問・教育)
- 大きな数の乱数を作るには
C 初心者です。 表題のように、unsigned longのスケールの乱数をつくりたいんですが、以下のように記述すると値がいつも同じになります。この理由と、正しく動作するにはどう直したらいいのか教えてください。 unsigned long ul; ul = 4294967295UL * rand() / (RAND_MAX + 1); 値は常に131071でした。
- ベストアンサー
- C・C++・C#
お礼
できました。 このトピックを参照される方は、下のコードをヒントに自分で作ってみるのも面白いと思います。 自分で作る際には、 「配列」というものを学習する必要がありました。 http://www.asahi-net.or.jp/~yf8k-kbys/newcpp19.html { srand( (unsigned)time( NULL ) ); int r; r = rand() % 10 + 1; for(int x = 1; x < 10000; x++){ if(x == tmondai){ hako[tmondai] = r; nrandom = r; cout << endl; cout <<"第"<<tmondai<<"問に、問題番号"<< r << "が登録されました。" << endl; break; } else if(hako[x] == r) { cout << endl; cout <<"選ばれた乱数は"<< r << "です。" << endl; cout << "乱数を再選択します。" << endl; cout <<"tmondai:"<<tmondai<< endl; Random(); break; } else if(hako[x] != r){ } } } askaaska様、御回答下さりありがとうございます。 教えて頂いたやり方だと、10000回ランダムを取る場合でも簡単にできます! C++をお金を掛けずにネットだけで勉強し初めてまだ4日目ですが、楽しいです。 是非皆さんも趣味で挑戦してみて下さい。