LoginSignup
9
11

More than 5 years have passed since last update.

お釣りの枚数を計算する

Last updated at Posted at 2016-01-24

何をしたいのか

書籍の展示即売会を予定しています。書籍の価格は3000円です。
購入者は、多くても50人とします。お釣りが不足しないようにするには、1000円札と5000円札を何枚用意すればいいでしょうか?

絶対に不足させない場合

可能性としては、以下の3パターンを考えます。

支払い方法 お釣り
1000円札3枚 なし
5000円1枚 1000円2枚
10000円1枚 5000円1枚と1000円2枚

1万円のパターンがすべてのパターンの枚数を包含しているので、最悪ケースは、50人とも1万円で払うときになり、1000円が100枚、5000円が50枚の合計35万円分のお釣りを用意することになります。

なるべく不足させない場合

50人ともが1万円という確率は、限りなく小さいでしょう。
財布の中身のシミュレーションより、財布の中身を以下の確率とし、それぞれの財布の中身は独立と仮定します。

お札の枚数 確率
1000円札0枚 20%
1000円札1枚 20%
1000円札2枚 20%
1000円札3枚 20%
1000円札4枚 20%
5000円0枚 50%
5000円1枚 50%

このことから、支払いパターンの確率は次のようになります。(お札があれば使うものとします)

支払い方法 お釣り 確率
1000円札3枚 なし 40%
5000円1枚 1000円2枚 30%
10000円1枚 5000円1枚と1000円2枚 30%

(1万円の確率 = 5000円0枚 × 1000円(0~2枚) = 0.5 × (0.2 + 0.2 + 0.2) = 0.3)

それぞれの支払いが独立と仮定したので、数人以上の合計は正規分布とみなせます。
シミュレーションして確かめてみます。

python
r = []
for i in range(100000):
    n = 100
    p = np.random.rand(50)
    for x in p:
        if x < 0.3:
            n += 1
        elif x < 0.6:
            n -= 1
    r.append(n)
r = np.array(r)
plt.hist(r, bins=20, range=(50, 150))
print('%.3f %.3f' % (r.std(), math.sqrt(50 * 0.6)))
>>>
5.472 5.477

image

1000円札の枚数と5000円札の枚数の分布は、以下のようになります。

1000円札の枚数分布 ~ $N(n \mu_{1000}, n \sigma^2_{1000})$
$\mu_{1000} = 0.4 ~ ~ 3 + 0.3 ~ (-2) + 0.3 ~ (-2) = 0$
$\sigma^2_{1000} = 0.4 (3-0)^2 + 0.3 (-2-0)^2 + 0.3 (-2-0)^2 = 6$

5000円札の枚数分布 ~ $N(n \mu_{5000}, n \sigma^2_{5000})$
$\mu_{5000} = 0.4 ~ ~ 0 + 0.3 ~ 1 + 0.3 ~ (-1) = 0$
$\sigma^2_{5000} = 0.4 (0-0)^2 + 0.3 (1-0)^2 + 0.3 (-1-0)^2 = 0.6$

お釣りが足りなくてもよい確率を5%とすると、両側 t分布表の(0.1, 50)のところの1.67591を使って計算できます。

python
tv = 1.67591 
print('1000円 %.3f' % (math.sqrt(50 * 6) * tv))
print('5000円 %.3f' % (math.sqrt(50 * 0.6) * tv))
>>>
1000 29.028
5000 9.179

結局、1000円が30枚、5000円が10枚の合計8万円分のお釣りを用意することになります。(途中で不足するのではなく、最後に不足するかどうかで計算しています)
このとき、どちらかが不足する確率は、単純に計算すると 約10%($=1-(1-0.05)^2$)ですが、実際には、下記のように考えられるので、5%と言えます。

ケース 確率 意味
1000円が余る 5000円が余る 0.9025 OK
1000円が余る 5000円が不足 0.0475 余った1000円でも返せるのOK
1000円が不足 5000円が余る 0.0475 NG
1000円が不足 5000円が不足 0.0025 NG

以上

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11