基本情報技術者 2019年 秋期 午前(科目A) 問06
問題文
Random()は、0以上未満の整数を一様な確率で返す関数である。整数型の変数A, B及びCに対して次の一連の手続を実行したとき、Cの値が0になる確率はどれか。
A = Random(10)
B = Random(10)
C = A - B
選択肢
ア:
イ:
ウ:(正解)
エ:
🔒 解説は解答すると表示されます
差がゼロとなる確率【午前解説】
正解の理由
A と B はどちらも Random(10) なので、0〜9 の10通りの整数をそれぞれ一様な確率でとる独立な値です。C = A − B が0になるのは A = B のときだけで、そのような組は (0,0), (1,1), …, (9,9) の10組です。全体の組合せは 通りなので、確率は です。したがって正解は ウ です。
(別の見方:A がどの値をとっても、B がそれと同じ値になる確率は です。)
解法ステップ
- A と B の組合せの総数を数える: 通り。
- C = 0 となる組(A = B)を数える:10組。
- 確率 = 。
- 選択肢と照合して ウ()を選ぶ。
選択肢別の誤答解説
- ア:
A = B となる組を (0,0) の1組だけと数えたり、全組合せ100通りのうち特定の1組の確率と取り違えたりすると出る値です。 - イ:
A と B の範囲を合わせて20通りと考えるなど、場合の数を取り違えると出る値です。 - ウ: (正解)
100通りのうち A = B の10組です。 - エ:
C = 0 だけでなく C = ±1 なども数えてしまうなど、条件を広げると出やすい値です。
よくある誤解
- Random(10) を「1以上10以下」と考える誤り。問題文のとおり「0以上 未満」なので 0〜9 です(本問の確率はどちらでも同じですが、値の範囲を問う問題では差が出ます)。
- A と B が独立であることを忘れ、A の値によって B の値が決まると考える誤り。
補足コラム
一般に、Random(m) と Random(n) を独立に呼び出して X(0〜m−1)と Y(0〜n−1)を得たとき、 です。本問は なので です。
import random
N = 1000000
count = 0
for _ in range(N):
A = random.randrange(10)
B = random.randrange(10)
if A - B == 0:
count += 1
print(count / N) # おおむね0.1 に収束
FAQ
Q1. B が Random(20) なら確率は?
A1. 全組合せは 通り、A = B となる組は10組なので になります。
A1. 全組合せは 通り、A = B となる組は10組なので になります。
Q2. 「C の値が1になる確率」は?
A2. A − B = 1 となる組は (1,0), (2,1), …, (9,8) の9組なので です。
A2. A − B = 1 となる組は (1,0), (2,1), …, (9,8) の9組なので です。
関連キーワード: 一様分布、独立事象、場合の数、確率、乱数

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

