くじをシミュレーションするプログラムを作成しています。
・1等~4等まであるくじで1等と2等は各1口3等は2口4等は6口と考えています。
・出る等はランダムで出す。
・確立(本数)を決めてランダム出た等賞を残数管理する必要がある。例えばランダムで2等が出た場合に1回目は表示するが2回目は残数がないので再抽選する必要ががあるというものです
分からないところ
再抽選させるところです。
ソースコード
#include <stdio.h> #include <stdlib.h> #include <time.h> /* 10回引いて1等・2等が1,3等が2,それ以外は4等*/ int main(void) { int num, c = 0, ca = 0, cb = 0, cc = 0; int k1, k2, k3, k4; srand((unsigned int)time(NULL)); printf("1等:"); scanf("%d", &k1); printf("2等:"); scanf("%d", &k2); printf("3等:"); scanf("%d", &k3); printf("4等:"); scanf("%d", &k4); for (int i = 1; i <= 10; i++) { num = rand() % 10 + 1; if (num >= 1 && num <= k1) { printf("%d:1等\n", i); c++; } else if (num >= k2 && num <= k3) { printf("%d:2等\n", i); ca++; } else if (num >= k4 && num <= 10) { printf("%d:4等\n", i); cc++; } else { printf("%d:3等\n", i); cb++; } if (c==k1) { break; } /* 1等が出たら抽選終了 */ } return 0; }
どこまでコードを書きましたか?
現状のコードを提示しましょう
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
了解です
> シミュレーションする
シミュレートする対象というのが,
「残ってない物を引き当てたからもう一回引いてください」というやり方を本当にやる方式のくじ引き なのでしょうか?
そうですね。おそらくそのようなくじです
そんなくじが…
後に引く人ほど
「2等! あー,でも2等はもう無いんすよ.もう一回引き直してください」
「3頭! あー,実は3等ももう無いんです.もう一回引き直してください」
「また2等! 無いっすねw 引き直しっす」
…
とかやられる率が高まるわけで,すっごいイライラしそう.
「そんな馬鹿な。。。」と言う印象ですね。無いものは無いので、残った等級の当たる確率が上がって続けていくのが自然なのですが。
なんでしょうね,
「10面サイコロを振って,1が出たら1等.でも1等が既に出ていたら振り直し」みたいなことをやるのかな?
なるほど。抽選方法がそのようなサイコロで、既に当選したものが貼り出されているような会場だと、そのようなシミュレーションに一致しますね。
回答1件
あなたの回答
tips
プレビュー