積の最小化
#お題
-1,000 ≦ A ≦ B ≦ 1,000 を満たす 2 つの整数 A, B が与えられます。A 以上 B 以下である 2 つの整数 X, Y を適当に選んだとき、X * Y の取り得る値の最小値を出力してください。なお、X と Y は同じ値でもよいものとします。
たとえば A が 3, B が 5 の場合について考えます。これは X と Y を両方とも 3 にしたときが最小で、 X * Y が 9 となります。
#入力
A B
#出力
答えとなる数値Nを出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。
N
#コード
a, b = [int(x) for x in input().split()]
if a <= 0 and b >= 0:
# a から b の間に 0 が含まれる
print(a * b)
elif a > 0:
# a と b が両方とも正の数
print(a * a)
else:
# a と b が両方とも負の数
print(b * b)
#参考
a, b = [int(x) for x in input().split()]
if a <= 0 and b >= 0:
# a から b の間に 0 が含まれる
print(a * b)
elif a > 0:
# a と b が両方とも正の数
print(a * a)
else:
# a と b が両方とも負の数
print(b * b)
- 上記の方針の通りに作成しました。
- 以下で if 文 の構造を見ていきます。
- 【
if a <= 0 and b >= 0:
】- ここは、
a
とb
の範囲が 0 を跨ぐときに実行されます。
- ここは、
- 【
elif a > 0:
】- ここは、
a
とb
が両方とも正の数であるときに実行されます。 a ≦ b
が成立しているので、a > 0
の条件のみで構いません。
- ここは、
- 【
else:
】- ここは、
a
とb
が両方とも負の数であるときに実行されます。 - なぜ、負の数であるときだけ実行されるのか簡単に説明します。
- ここに到達するということは、以下の命題がすべて偽だったということです。
a
が 0 以下 かつb
が 0 以上であるa
とb
がともに正の数である
- つまり、以下のことが言えます。
a
とb
の符号は同じであるa
は正の数ではない
- よって、導き出されるパターンは以下の通りです。
a
とb
はともに負の数である
- ここに到達するということは、以下の命題がすべて偽だったということです。
- ここは、
- 【