paizaラーニングの練習問題(積の最小化 python3 Cクラス)

今回は、paizaラーニング「積の最小化」について解いてみました。正負の整数が2つ与えられて、その値の範囲内で適当な数値x,yを選び、x、yの積のうち、最小の値を出力する問題です。

解答例では、与えられる数値が「正」「正」、「負」「負」、「範囲に0が含まれるか」の条件で分岐して、最小の積の値を人が計算して、プログラムで出力するものでした。ゼロが含まれたら「0」、正の積なら最小値の積、負の積なら最大値の積という感じです。

しかし、これではプログラミングの練習というより、算数問題を人が解いてその通りに出力しているだけです。あんまり面白くありません。

そこで、答えは人間にはわからないけど、プログラムが積の最小値を見つけられるようにしてみました。この方がプログラムの行数も少なくてすみます。

# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
a,b = [int(x) for x in input().split(" ")]
ans=a*b
for x in range(a,b+1):
    for y in range(a,b+1):
        if x*y <ans:
            ans=x*y
print(ans)

a,bは与えられる正負の整数、ansは求める積の最小値を入れる変数です。

最初にansに適当な積a*bを入れて初期化します。

Range()関数でaからb+1の数字を発生させて、x,yに入れて、for文で回します。b+1としているのはrange()関数では、最後の値には到達しないから、求めたいbに1を加えています。

もし、最初のansよりも小さい組み合わせの積x*yが見つかれば、ansの値を新しい積の値で更新します。

こうすることで、与えられるa,bが正なのか負なのか、0が含まれているのかを知らなくても、プログラムが積の最小値を求めることができます。