AtCoder Beginner Contest 164 B を Python で
AtCoder Beginner Contest 164 B を Python で解説していきます。
それでは,早速解説していきます。
まずは問題文から。
B – Battle
実行時間制限: 2 sec / メモリ制限: 1024 MB×
配点 : 200 点
問題文
高橋君と青木君がモンスターを闘わせます。
高橋君のモンスターは体力が A で攻撃力が B です。 青木君のモンスターは体力が C で攻撃力が D です。
高橋君→青木君→高橋君→青木君→… の順に攻撃を行います。 攻撃とは、相手のモンスターの体力の値を自分のモンスターの攻撃力のぶんだけ減らすことをいいます。 このことをどちらかのモンスターの体力が 0 以下になるまで続けたとき、 先に自分のモンスターの体力が 0 以下になった方の負け、そうでない方の勝ちです。
高橋君が勝つなら Yes
、負けるなら No
を出力してください。
制約
- 1≤A,B,C,D≤100
- 入力はすべて整数である。
入力
入力は以下の形式で標準入力から与えられる。
A B C D
出力
高橋君が勝つなら Yes
、負けるなら No
を出力せよ。
入力例 1
10 9 10 10
出力例 1
No
はじめに、高橋君の攻撃で青木君のモンスターの体力が 10−9=1 になります。
次に、青木君の攻撃で高橋君のモンスターの体力が 10−10=0 になります。
高橋君のモンスターの体力が先に 0 以下になったため、高橋君の負けです。
入力例 2
46 4 40 5
出力例 2
Yes
解説
標準入力で A,B,C,D が与えられ,A から D を引き,C から B を引いていき,最終的にどちらが先に0以下になるかという問題です。
色々と方法は考えられますが,一番単純な while を使った解き方で説明していきます。
A > 0 または C > 0 であるという条件の下で,以下の試行を順に行っていきます。
- C から B を引く。
- C ≦ 0 なら,高橋君が青木君を攻撃して青木君の体力が0以下になったので,’Yes’を出力して終了する
- A から D を引く。
- A ≦ 0 なら,青木君が高橋君を攻撃して高橋君の体力が0以下になったので,’No’を出力して終了する
この1~4の操作をずっと続けていって,最終的にどちらかの体力が負になった時点で終了すればいいです。あとはこれをコーディングしていきます。
while 文の最中で操作を終了したいときは,break を使えばよいです。
それでは,解答例に移ります。
解答例
a,b,c,d = map(int, input().split())
while a > 0 or c > 0:
c -= b
if c <= 0:
print('Yes')
break
a -= d
if a <= 0:
print('No')
break
いかがだったでしょうか。
もしよろしければ,twitter のフォロー,いいね,RT よろしくお願いします!
こちらの励みになります😁
それでは!