考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC030-B - 時計盤 を解く

ABC030-B - 時計盤

 

時刻が与えられるので、その時間における

アナログ時計の短針と長針がなす角度を答える問題

 

時計の12時方向を0度とし

短針の角度と長針の角度をそれぞれ求め、

それぞれの角度をの差を求めることで短針と長針のなす角を求めることができる

 

また、「小さい方の角度を求める」ことに注意

例えば、30度と240度の場合は答えは210度ではなく150度が正解となる

この150度という値は 360 - (240 - 30) = 150 という計算で求められる

 

つまり、2つの角度の差を求め、その値と360から引いた値の

より小さい方の値を答えとすればいい

 

それでは以上を踏まえてコードを書いていく

 

提出したコード

# 入力
n,m=map(int,input().split())

# 長針の角度(60分で360度なので、1分で6度)
b=m*6

# 短針の角度(12時間で360度なので、1時間で30度)
# 12で余りを取って、0〜11時として計算する
a=n%12*30

# 長針が2分進むにつき、短針は1度動くので
# その分も短針の角度に加算
a+=m/2

# 小さい方の角度を出力する
print(min(abs(a-b),360-abs(a-b)))
 
短針の角度を求めるときは以下の2点に注意する必要がある
 
・0〜23時で時間が与えられる
・長針の角度も短針に影響がある

 

コード中にコメントで計算の詳細を記載したので

よくわからない方はそちらを確認されたし

  

提出結果はACでした