アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

乱数は1の方が答えてるので、確率は



kakuritsu = 80;
if(kakuritsu <=0 || kakuritsu < rand()%100+1)
{
外れ
}else{
当たり
}

で出来るはずです。kakuritsuには%の数が入ります。
この場合は80%の確率で当たります。
関数にすると良いかもしれません。
1が50%で、2が25%というやり方だと、その1とか2という変数に応じて確率を入れると良いと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/12/07 14:45

★アドバイス


>また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
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/12/07 18:20

一応no2の解説。


紙に棒を書きます。1から100までのメモリがあります。
確率の長さだけ下から塗りつぶします。
80%なら、1から80まで。
その棒を矢印が高速で動いています( rand()%100+1 )。止まったとき、塗りつぶしたところである、1から80のどこかに矢印が止まれば当たりです。
外れである、81から100の間に止まれば外れです。
0%やマイナス4000%なんていうのは勿論外れです。
友人に考えてもらったんですけどね。

ちなみに確率が少数になる場合は、小数点を動かして整数にして、randの部分も出る数をそれに合わせてください。
例えば、80.5%で当たるなら整数の805にして、棒の長さは100ではなく1000になります。両方十倍。
1000のうち1から805のどこかに矢印が止まればあたりです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
大変わかりやすい説明で自分でも理解できます^^;

rand関数は自分がもってる本には載ってないみたいです
入門編と応用編2冊ありますがもっと高度なのかも^^;

ありがとうございました

お礼日時:2007/12/07 18:16
    • good
    • 0
この回答へのお礼

回答ありがとうございます
乱数というのですね

お礼日時:2007/12/07 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!