AtCoder Context ABC 168- C - : (Colon)

運行要求
運行時間限制: 2sec
內存限制: 1024MB
未經容許,不得許轉載
原題目連接微信

題目
有一個時針,分針分別長爲A釐米和B釐米的鐘表。
時針和分針的一端被固定在同一個固定點。以這個固定點爲中心,時針,分針按照必定的角速度旋轉。時針每12小時轉一週,分針每60分鐘轉一週。
0點的時候,時針和分針重合,求正好H時M分的時候,時針和分針的另外兩個端點的距離less

輸入前提條件spa

  • 全部的輸入均爲整數
  • 1<=A,B<=1000
  • 0<=H<=11
  • 0<=M<=59

輸入
輸入按照如下形式標準輸入code

AA BB HH MM

輸出
去掉單位,和正確答案的偏差保持在10^-9如下的話爲正確答案blog


例1
輸入內存

3 4 9 0

輸出get

5.00000000000000000000

如圖所示,兩個針的端點的距離是5
when_a_nameless_star_falls_into_the_sky.pnginput

例1
輸入it

3 4 10 40

輸出class

4.56425719433005567605

when_flower_petals_flutter.png
兩根針如圖所示,兩根針按照必定的角速度旋轉

解題思路
直角座標系解析幾何,歐式距離求法
詳細稍後補上
先貼上代碼

代碼

import math
A, B, H, M = map(int,input().split())

def calculate(a, b, h, m):
    hradians = ((h % 12) / 12)*360 + (((m/60) % 12) / 12)*360
    mradians = (m / 60) * 360

    hx = a * math.sin(math.radians(hradians))
    hy = a * math.cos(math.radians(hradians))

    mx = b * math.sin(math.radians(mradians))
    my = b * math.cos(math.radians(mradians))

    print(distance(hx,hy,mx,my))

def distance(x1,y1,x2,y2):
    return math.sqrt(abs(x1-x2)**2 + abs(y1-y2)**2)
calculate(A, B, H, M)
import math
A, B, H, M = map(int,input().split())

def calculate(a, b, h, m):
    hradians = ((h % 12) / 12)*360 + (((m/60) % 12) / 12)*360
    mradians = (m / 60) * 360

    hx = a * math.sin(math.radians(hradians))
    hy = a * math.cos(math.radians(hradians))

    mx = b * math.sin(math.radians(mradians))
    my = b * math.cos(math.radians(mradians))

    print(distance(hx,hy,mx,my))

def distance(x1,y1,x2,y2):
    return math.sqrt(abs(x1-x2)**2 + abs(y1-y2)**2)
calculate(A, B, H, M)

總結
這道題是一道幾何體
解析幾何或者純幾何的求法

※ 另外,我會在個人微信我的訂閱號上推出一些文章,歡迎關注
二維碼.jpg

相關文章
相關標籤/搜索