A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
例えば、rand(3); のように引数で範囲を指定できれば問題はないのですが、残念ながらrand関数では引数を用いません。
ここで、ある数字(例えば、23)がランダムで出力されたとします。
プログラムではこの数字に『グー、チョキ、パー』のいづれかを割り当てなければなりません。
「23が出てきたからグー」みたいな処理になります。
必要な条件は、『グー、チョキ、パー』が同じくらいの割合で出現することです。
(厳密には"ランダム"なので確率が偏ってもいいのですが、プログラムで意図的に偏らせてはランダムではなくなります)
整数の集合をn個の集合に分割する方法として、モジュロ演算があります。(時計算術、剰余演算とも言われます)
6 ≡ 9 (modulo 3) ← 6と9は、3で割った余りが等しいと言う意味
これを用いれば、直ちに 23 ≡ 2 (modulo 3) と瞬時にわかります。
C言語では 23 % 3 == 2 となります。
つまり、『グー、チョキ、パー』に『1, 2, 3』を割当て、ランダムな数字にモジュロ演算をかければ、『1, 2, 3』のいづれかを得て『グー、チョキ、パー』に変換できると言うわけです。
No.3
- 回答日時:
No.2
- 回答日時:
rand() は 0〜RAND_MAXのランダムな値になります。
RAND_MAXは 32767以上となっています。
仮に、 RAND_MAX= 32767 として。
そのままでは、0〜32767で 32768通りの値を取ります。
今回、0,1,2の3通りを使いたいわけですが、どうするか、方法はいくつかあります。
代表的なのは次の2つでしょう。
(1) 0,1,2 以外だったらもう一度rand()で値を得る。
→ 凄く非効率的です。
rand()関数の性質上、確率の隔りが大きくなる可能性があります(まったく出現しないことも)
(2) 32768通りの値を(だいたい)3等分にグループ分けして、それぞれを 0,1,2 に割り当てる。
これなら効率良く0,1,2 を得られます。
(2)のグループ分けする方法は、(だいたい)3等分にできればなんでもいいです。
0,1,2,3,5,9 ... → 0
4,7,8,13,... → 1
残り → 2
等と不規則でも3等分にできていればOKです。
ですが、それでは効率が悪いので、「なにかの計算式でグループ分けする」方法を使います。
その「なにかの計算式でグループ分けする」方法の一つが「余りでグループ分け」です。
3で割った余りが0のグループ、1のグループ、2のグループと3等分できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- メガネ・コンタクト・視力矯正 コンタクトレンズの乱視補正について 1 2023/05/17 23:32
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- Java Java 石取りゲーム 3 2023/02/02 15:46
- 数学 代数の質問です 2 2022/04/30 14:10
- 数学 数学の「命題」の範囲について、問題は解けるのですが理解がイマイチできていないところがあるので質問させ 4 2023/03/03 13:43
- 経済学 ゲーム理論/ナッシュ均衡についての質問です なぜ3だけでなく2も囲むのですか? 単純に数字が大きい方 2 2023/01/15 18:48
- 不動産投資・投資信託 つみたてNISAにおける買い増しについて 7 2022/12/04 17:15
- 物理学 大学物理に詳しい方に質問です。 ラザフォードたちが実験で知りたかったことは衝突パラメータbと原子核の 1 2023/03/16 03:39
- 電気・ガス・水道業 太陽光発電での全量売電から余剰売電への変更について教えて下さい。 現在築4年目の戸建住宅(一条工務店 1 2022/08/23 12:41
- 英語 ”be”<動詞>と<助動詞>混同の誤り ― 形式主義文法論の混迷 12 2022/05/17 11:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelでPC(パソコン)によって...
-
c languageで 簡単な質問があ...
-
VB.net Double と...
-
C言語でセルオートマトンを作成...
-
Log関数に関する質問
-
VBAでミリ秒まで出力する方法
-
距離から緯度経度を求める方法
-
乱数 なぜ剰余を使うのか
-
大きすぎる数値になるとE+にな...
-
色の判定
-
【C言語】RGBと輝度の計算に関して
-
100桁の計算ができなくて困って...
-
16進数とかわからないです
-
”/”を使わずに割り算したいんで...
-
データ型 double の桁数について
-
計算に誤差が出る?
-
【VBA、VBS】何故False・・・?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
ExcelでPC(パソコン)によって...
-
除算を使わずに10で割りたい。
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
VBAでミリ秒まで出力する方法
-
100桁の計算ができなくて困って...
-
2進数の足し算(C言語)
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
コンピューターは指数関数をど...
-
距離から緯度経度を求める方法
-
BCD・HEX・BINについて
おすすめ情報