[Python] 鶴亀算

Python で鶴亀算を解いてみます。

問題

鶴と亀が合わせてN匹、足の数がM本でした。鶴と亀は何匹いるでしょうか?

回答

力ずく法

ループを回して、答えが見つかるまで総当たりします。

計算量は \( O (N) \) です。

N, M = map(int,input().split())

for i in range(1, N+1):
    # 足の数
    f = 2 * i + 4 * (N - i)
    if f == M:
        print(f'鶴が{i}匹の足が{i * 2}本、亀が{N - i}匹の足が{M - i * 2}本。')
        break
else:
    print('普通の鶴と亀ではないようです。')

連立方程式

鶴と亀の数をそれぞれ\(x\)、\(y\)、総匹数を\(n\)、足の総本数を\(m\)とすると、以下のように立式できます。

$$\begin{eqnarray} \left\{ \begin{array}{l} x + y = n \\ 2x + 4y = m \end{array} \right. \end{eqnarray}$$

よって、鶴は以下になります。

$$x=\frac{(4n-m)}{2}$$

計算量は \( O (1) \) です。

N, M = map(int,input().split())

crain = (4 * N - M) / 2

if crain.is_integer() and crain > 0:
    crain = int(crain)
    print(f'鶴が{crain}匹の足が{crain * 2}本、亀が{N - crain}匹の足が{M - crain * 2}本。')
else:
    print('普通の鶴と亀ではないようです。')