AtCoder Beginner Contest001の問題を解答します。
A – 積雪深差
1 2 3 |
h1 = int(input()) h2 = int(input()) print(h1-h2) |
B – 視程の通報
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
m = input() n = int(m) """ 【条件】 ①100m未満 00 ②100m ~ 5000m 距離(km)*10倍 ③6000m ~30000m 距離(km)+50 ④35000m ~ 70000m ((距離(km)-30)/5)+80 ⑤70001~ 89 """ if n < 100: print('00') elif 100<=n<=999: print('0'+ m[0]) elif 1000<=n<=5000: print(m[:2]) elif 6000<=n<=30000: print(((n)//1000)+50) elif 35000<=n<=70000: print((int(m[:2])-30)//5+80) elif n > 70000: print('89') |
以前解いたときはACできずに一度断念してしまったのですが、久しぶりに挑戦しました。
シンプルな場合分けでよさそうでした。
ややこしいのは②と③のパターンで、桁が変わるときにどうなるのかを考える必要がありそうでした。
C – 風力観測
方針
・条件分岐を全部書く
・round関数で四捨五入する時、2.5など端数が5である場合は、四捨五入の後の数字が偶数となるように行われるため、端数が5の場合は切り上げする関数を作成
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
import math from math import pi #風向を返す関数 def Wind_Dirction(n): if 11.25 <=n<33.75: return "NNE" elif 33.75<=n<56.25: return "NE" elif 56.25<=n<78.75: return "ENE" elif 78.75<=n<101.25: return "E" elif 101.25<=n<123.75: return "ESE" elif 123.75<=n<146.25: return "SE" elif 146.25<=n<168.75: return "SSE" elif 168.75<=n<191.25: return "S" elif 191.25<=n<213.75: return "SSW" elif 213.75<=n<236.25: return "SW" elif 236.25<=n<258.75: return "WSW" elif 258.75<=n<281.25: return "W" elif 281.25<=n<303.75: return "WNW" elif 303.75<=n<326.25: return "NW" elif 326.25<=n<348.75: return "NNW" else: return "N" #風力を返す関数 def Wind_Power(n): if 0.0<=n<=0.2: return 0 if 0.3<=n<=1.5: return 1 if 1.6<=n<=3.3: return 2 if 3.4<=n<=5.4: return 3 if 5.5<=n<=7.9: return 4 if 8.0<=n<=10.7: return 5 if 10.8<=n<=13.8: return 6 if 13.9<=n<=17.1: return 7 if 17.2<=n<=20.7: return 8 if 20.8<=n<=24.4: return 9 if 24.5<=n<=28.4: return 10 if 28.5<=n<=32.6: return 11 if 32.7<=n: return 12 #四捨五入を行う関数 def my_round(x,d=0): p = 10**d return float(math.floor((x*p) + math.copysign(0.5,x)))/p #入力 a,b = map(int, input().split()) #aは風向が10倍されているため10で割り算 a = a/10 #風向を取得 A = Wind_Dirction(a) #風車が回った距離を60で割ることで1秒あたりの風速を計算→m/s b = b/60 #四捨五入 b = my_round(b,1) #風力を取得 B = Wind_Power(b) #風力が0の場合はCを出力する指示 if B==0: print("C",B) #風向と風力を出力 else: print(A,B) |
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import math from math import pi def Wind_Dirction(n): if 11.25 <=n<33.75: return "NNE" elif 33.75<=n<56.25: return "NE" elif 56.25<=n<78.75: return "ENE" elif 78.75<=n<101.25: return "E" elif 101.25<=n<123.75: return "ESE" elif 123.75<=n<146.25: return "SE" elif 146.25<=n<168.75: return "SSE" elif 168.75<=n<191.25: return "S" elif 191.25<=n<213.75: return "SSW" elif 213.75<=n<236.25: return "SW" elif 236.25<=n<258.75: return "WSW" elif 258.75<=n<281.25: return "W" elif 281.25<=n<303.75: return "WNW" elif 303.75<=n<326.25: return "NW" elif 326.25<=n<348.75: return "NNW" else: return "N" def Wind_Power(n): if 0.0<=n<=0.2: return 0 if 0.3<=n<=1.5: return 1 if 1.6<=n<=3.3: return 2 if 3.4<=n<=5.4: return 3 if 5.5<=n<=7.9: return 4 if 8.0<=n<=10.7: return 5 if 10.8<=n<=13.8: return 6 if 13.9<=n<=17.1: return 7 if 17.2<=n<=20.7: return 8 if 20.8<=n<=24.4: return 9 if 24.5<=n<=28.4: return 10 if 28.5<=n<=32.6: return 11 if 32.7<=n: return 12 def my_round(x,d=0): p = 10**d return float(math.floor((x*p) + math.copysign(0.5,x)))/p a,b = map(int, input().split()) a = a/10 A = Wind_Dirction(a) b = b/60 b = my_round(b,1) B = Wind_Power(b) if B==0: print("C",B) else: print(A,B) |
その他
他の解説記事一覧
AtCoder Beginner Contest 解答・解説記事一覧
参考
Atcoderを解くうえで参考になりそうな書籍をこちらの記事で紹介しています。
コメント