ABC001-B - 視程の通報 を解く
ABC001-B - 視程の通報
いきなり面倒臭そうだ…
…でもよく読んでみるとそこまで複雑ではない
5パターンの分岐を書けばいいだけじゃん
説明中に書かれている単位は[km]だけど
入力は[m]
直す必要がある
各分岐中の処理は簡単な算数だけど、1桁の場合は十の位を0埋めしないといけないらしい
0埋めってどうやるんだっけ
(ググった)
なるほど、右寄せ0埋めは zfill関数 というものがあるらしい
計算結果をstr型にキャストしてこいつをかませればいけそうだ
…これ、答えは3桁になることもあるのかな? よくわからんな
あ、問題文中に必ず2桁になると書いてあった。じゃあ大丈夫か
5つの条件の内、計算結果が1桁になり得るのは 2番目の「0.1km以上5km以下」だけか…(他は固定値か、最後に10以上の数を加算しているので)
じゃあこのときだけ0埋めの処理をすればいいか
書いてみたけど、これ条件分岐隙間だらけじゃん…mが5.5kmとかだったらどうすんだ?
(問題文を読む)
…どうやらそういう値は入力されないらしい
よし、サンプルを投げてみるか
…出力結果が小数で出てきた。 最初の単位変換で数値が小数になっているのか
計算結果は int型にキャストする必要があるな
提出したコード
# 入力 m=int(input()) # m->kmに直す m/=1000 # 出力値(初期値はどうせ上書きされるので適当) VV=0 if m<0.1: VV='00' elif 0.1<=m and m<=5: VV=m*10 # int型にキャスト VV=int(VV) # 文字列型に変換(zfillの準備) VV=str(VV) # 十の位まで0埋めする VV=VV.zfill(2) elif 6<=m and m<=30: VV=m+50 # int型にキャスト VV=int(VV) elif 35<=m and m<=70: VV=(m-30)//5+80 # int型にキャスト VV=int(VV) else: VV=89 # 計算結果を出力 print(VV)
ACだった
結構面倒臭かったね