• ベストアンサー

ランダムで数を表示するには

C言語を覚えたてなんですが 計算や変数を代入などは本にやり方が書いてあってわかったのですが たとえばサイコロやルーレットのプログラムを作るとして 1~6の数字がランダムででるようなプログラムをつくるには どうすればいいのでしょうか? また1が50%で、2が25%、3が10%で4~6が5%づつとか 出る確率を設定することとかも出来るのでしょうか?

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

  • ベストアンサー
noname#51262
noname#51262
回答No.2

乱数は1の方が答えてるので、確率は kakuritsu = 80; if(kakuritsu <=0 || kakuritsu < rand()%100+1) { 外れ }else{ 当たり } で出来るはずです。kakuritsuには%の数が入ります。 この場合は80%の確率で当たります。 関数にすると良いかもしれません。 1が50%で、2が25%というやり方だと、その1とか2という変数に応じて確率を入れると良いと思います。

abc-1356
質問者

お礼

回答ありがとうございます ifは本に書いてあったのでわかります(少しですが^^;) randという関数は初めてみました。 自分が買った本は超初心者用だと思うんで^^;

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス >また1が50%で、2が25%、3が10%で4~6が5%づつとか >出る確率を設定することとかも出来るのでしょうか?  この場合は 0~99(%) までの乱数を発生させてif出条件分岐すればよい。  下にサンプルを載せておきます。 サンプル1: int rnd, saikoro; // 乱数の初期化と乱数発生 srand( time(NULL) ); rnd = (rand() % 100); if ( rnd < 50 ){  saikoro = 1; } else if ( rnd < 50+25 ){  saikoro = 2; } else if ( rnd < 50+25+10 ){  saikoro = 3; } else if ( rnd < 50+25+10+5 ){  saikoro = 4; } else if ( rnd < 50+25+10+5+5 ){  saikoro = 5; } else if ( rnd < 50+25+10+5+5+5 ){  saikoro = 6; } サンプル2: static const int randtable[] = {  50, 25, 10, 5, 5, 5, -1, }; int i, sum, rnd, saikoro; // 乱数の初期化と乱数発生 srand( time(NULL) ); rnd = (rand() % 100); for ( sum = i = 0 ; randtable[i] != -1 ; i++ ){  sum += randtable[ i ];    if ( rnd < sum ){   saikoro = (i + 1);   break;  } } その他: ・サンプル1、サンプル2も両方とも同じです。  サンプル2は後で確立のパーセントをカスタマイズ可能にするために randtable 配列と  for分を使っています。サンプル1は理解しやすいようにしました。  参考にして下さい。 ・以上。

参考URL:
http://www.mit.msn.to/algorithm/stdlib.html
abc-1356
質問者

お礼

回答ありがとうございます   if elseは多少ですがつかったことあるんでわかります わざわざサンプルありがとうございました^^ 大変わかりやすいです^^

noname#51262
noname#51262
回答No.3

一応no2の解説。 紙に棒を書きます。1から100までのメモリがあります。 確率の長さだけ下から塗りつぶします。 80%なら、1から80まで。 その棒を矢印が高速で動いています( rand()%100+1 )。止まったとき、塗りつぶしたところである、1から80のどこかに矢印が止まれば当たりです。 外れである、81から100の間に止まれば外れです。 0%やマイナス4000%なんていうのは勿論外れです。 友人に考えてもらったんですけどね。 ちなみに確率が少数になる場合は、小数点を動かして整数にして、randの部分も出る数をそれに合わせてください。 例えば、80.5%で当たるなら整数の805にして、棒の長さは100ではなく1000になります。両方十倍。 1000のうち1から805のどこかに矢印が止まればあたりです。

abc-1356
質問者

お礼

回答ありがとうございます 大変わかりやすい説明で自分でも理解できます^^; rand関数は自分がもってる本には載ってないみたいです 入門編と応用編2冊ありますがもっと高度なのかも^^; ありがとうございました

noname#98978
noname#98978
回答No.1

関連するQ&A