0
0

積の最小化

Last updated at Posted at 2024-01-11

前回の問題を教訓に
どちらかが0の場合は問答無用に0が最小になるので
こんな感じで書いてみました。
つまり、最初の数値を基準に、小さくなったらそれを採用するみたいな感じですね。
で、A~Bの間をループさせると。負の数が含まれていても結局あんまり関係ないなということで
こうなりました。

A,B = map(int,input().split())
result = 0
for i in range(A,B+1):
    for j in range(A,B+1):
      if A == 0 or B == 0:
          break
      if result == 0:
          result = i * j
      elif result > i * j:
          result = i * j

print(result)

でも解答の場合は、もうちょっとロジック的に書かれていて
たとえばAが-5、Bが2だとすると

AxB=-10
-4x1-4
-3x-1=3
0x1=0
とやってみると結果的にAxBが一番最小でした。
で、どちらも正なら、A<Bが決まっているのでAxAが最小ですね。
(九九を思い浮かべればわかる)
どちらも負なら多ければ多いほど小さくなるので、BxBが最小になると。
ロジカルですね。。。ただしかなりシンプルになります。

A,B = map(int,input().split())
if A <= 0 <= B:
    print(A * B)
elif A > 0:
    print(A * A)
else:
    print(B * B)

PHPで最初のコードを書いてみます

<?php
    list($A,$B) = explode(" ",fgets(STDIN));
    $result = 0;
    for ($i=$A;$i<=$B;$i++){
        for ($j=$A;$j<=$B;$j++){
          if ($A == 0 or $B == 0){
              break;
          } else if($result == 0){
              $result = $i * $j;
          } else if($result > $i * $j){
              $result = $i * $j;
          }
        }   
    }     
    print($result);
?>

つぎにロジカルなかつシンプルなバージョン

<?php
    list($A,$B) = explode(" ",fgets(STDIN));
    $result = 0;
    if($A <= 0 && $B >= 0){
        print($A * $B);
    } else if($A >= 0 && $B >=0){
        print($A * $A);
    } else if ($A < 0 && $B < 0){
        print($B * $B);
    }
?>

0
0
2

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
0
0