在田野中有一隻田鼠和一隻狗。狗想要吃掉田鼠,而田鼠則要儘速的逃進鼠洞中(田表面有許多鼠洞)。狗和田鼠都不是數學專家,但是也都不笨。當田鼠決定了某一個鼠洞後,就以一定的速度直線的跑去。而狗則非常擅長解讀肢體語言,當他一知道田鼠要往那個洞跑,就以田鼠2 倍的速度直線奔去,想要抓住田鼠。假如狗先到達那個洞,田鼠就會被吃掉,否則,田鼠就可安全逃走。
你必須幫田鼠選一個洞,使他可以逃離狗的魔掌(如果這樣的洞存在的話)。
輸入規範
輸入檔案中包含好幾組測試資料,每組測試資料的第一列有一個整數n 和4 個浮點數x1,y1,x2,y2。n(n £ 1000)代表本組測試資料有多少個鼠洞,4 個浮點數(均介於-10000 及+10000之間)代表田鼠(x1,y1)及狗(x2,y2)的x-y 座標。接下來的n 列,每列有2 個浮點數,代表每個鼠洞的座標。(所有的浮點數都到小數點後3 位測試資料組間有一空白列(請參考輸入範例)
輸出規範
每組測試資料輸出一列。如果田鼠可以逃走,請輸出"田鼠可由(x,y)的鼠洞逃走"。(x,y)是某一個洞的座標。如果田鼠無法逃走,請輸出"田鼠無法逃走"請注意:如果田鼠可以從不只一個洞逃走,請輸出在輸入中最前的洞。
輸入範例(test7.txt)
1 1.000 1.000 2.000 2.000
1.500 1.500
3 2.000 2.000 1.000 1.000
1.500 1.500
2.500 2.500
3.500 3.500
輸出範例(result7.txt)
田鼠無法逃走
田鼠可由(2.500,2.500)的鼠洞逃走
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double, ansX As Double, ansY As Double
回覆刪除Dim ans As Boolean
Private Sub Form_Load()
Open App.Path & "/in.txt" For Input As #1
Open App.Path & "/out.txt" For Output As #2
Do While Not EOF(1)
Input #1, n, x1, y1, x2, y2
ans = False
For i = 1 To n
Input #1, x3, Y3
a = ((x1 - x3) ^ 2 + (y1 - Y3) ^ 2) ^ 0.5
b = ((x2 - x3) ^ 2 + (y2 - Y3) ^ 2) ^ 0.5
If b < 2 * a Then ans = True: ansX = x3: ansY = Y3
Next i
If ans = False Then
Print #2, "田鼠無法順利逃走"
Else
Print #2, "田鼠可由(" & Format(ansX, "###0.000") & "," & Format(ansY, "###0.000") & ")的鼠洞逃走"
End If
Loop
Close #2
Close #1
End Sub
高仔好,
回覆刪除這程式初看正確。
但是,題目中有說到如果有兩個洞可以出去,要印出的是?
Dim mou(2) As Single
回覆刪除Dim dog(2) As Single
Dim ans As Boolean
Private Sub Form_Load()
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do Until EOF(1)
ans = False
Input #1, x
Input #1, mou(1), mou(2), dog(1), dog(2)
For i = 1 To x
Input #1, q, w
mxstep = Abs(mou(1) - q)
mystep = Abs(mou(2) - w)
dxstep = Abs(dog(1) - q)
dystep = Abs(dog(2) - w)
mdis = (mxstep ^ 2 + mystep ^ 2) ^ 0.5
ddis = (dxstep ^ 2 + dystep ^ 2) ^ 0.5
If (ddis / 2) > mdis Then
Print #2, "田鼠可由("; q, w; ")的鼠洞逃走"
ans = True
End If
Next i
If ans = False Then Print #2, "田鼠無法逃走"
Loop
Close #1
Close #2
End Sub