「99年烏龜和兔子盃有一跑步大賽」開始了!這次還是有好多烏龜和兔子的朋友來參加,今年的大賽和往年相同,路程全長一公里,每次由烏龜組和兔子組各推派一個選手參加比賽,在槍聲響起後就可以自由地跑,先到達終點者獲勝。因為是友誼賽,所以只要再同一分鐘到達者,就算平手。
輸入檔說明:輸入資料有超過1組的比賽數據,每組3行資料,資料的第1行是一個整數n,範圍從0到20。當n等於0時,代表資料結束。每組資料的第2行有n個整數,由空白分開,範圍從-1000到1000,第i個整數代表烏龜組選手在第i分鐘裡所跑的距離,單位是公尺,如果為正數就是代表往前跑,負數就是往回跑。第3行和第2行相同,不過代表的是兔子組選手的資料。注意::當有任何一方已到達終點時,後面資料應該被忽略。
輸出檔說明:每1組比賽數據應有1組輸出結果,每1組輸出結果應該只有1行字串,代表這一組比賽是誰獲勝(跑的距離先等於或大於1000),烏龜組獲聖則輸出Turtle,兔子組就是Rabbit,平手的話就輸出Same,如果資料結束時比賽還未結束(雙方都還沒到達終點),就輸出Unknow。
輸入範例:
4
200 400 600 600
400 -200 800 -200
6
200 200 200 200 200 200
300 300 0 0 300 300
2
100 100
400 -200
0
輸出範例:
Same
Turtle
Unknow
參考http://chscvb.blogspot.com/2010/02/20100212.html
Dim T(20), R(20)
回覆刪除Private Sub Form_Load()
Me.Hide
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
If n = 0 Then GoTo bye:
'--1--
For i = 1 To n
Input #1, T(i)
Next
For i = 1 To n
Input #1, R(i)
Next
'--2--
For i = 1 To n
Ts = Ts + T(i)
Rs = Rs + R(i)
If Rs >= 1000 And Ts >= 1000 Then Print #2, "Same": GoTo exits
If Ts >= 1000 And Rs < 1000 Then Print #2, "Turtle": GoTo exits
If Rs >= 1000 And Ts < 1000 Then Print #2, "Rabbit": GoTo exits
Next
Print #2, "Unknow"
exits:
Ts = 0
Rs = 0
Loop
bye:
Close #1
Close #2
End
End Sub
--------------
一個下午練了五題簡單的
其他隊員~加油吧 !!!
這題寫用了兩個GOTO 感覺不是說很好
arro好,
回覆刪除1.程式可以。
2.題目的兩個文字錯誤,去改一下吧。(同一分鐘,當n等於0時,)
3.是的,你用了很多的goto,不是好習慣。
4.像是可以用 do until n = 0 ....loop,之類的方式,而少用goto
5.是的,其它的隊員,加油。還有3天,寒假就結束了,多做幾題吧。
題目文字已修正~
回覆刪除Private Sub Form_Load()
回覆刪除Me.Hide
Dim t(20), r(20)
Open App.Path & "\out.txt" For Output As #2
Open App.Path & "\in.txt" For Input As #1
Do Until EOF(1)
Input #1, n
If n = 0 Then
Close #1
Close #2
End
Exit Sub
End If
For i = 1 To n
Input #1, t(i)
Next
For i = 1 To n
Input #1, r(i)
Next
For i = 1 To n
ts = ts + t(i)
rs = rs + r(i)
If ts >= 1000 And rs >= 1000 Then Print #2, "Same": Exit For
If ts >= 1000 And rs < 1000 Then Print #2, "Turtle": Exit For
If ts < 1000 And rs >= 1000 Then Print #2, "Rubbit": Exit For
If i = n Then Print #2, "Unknow"
Next
ts = 0
rs = 0
Loop
End
End Sub
Dim a As Byte
回覆刪除Dim T As Integer
Dim B As Integer
Dim C As String
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
a = 1
Do While a <> 0
Input #1, a
For i = 1 To a
Input #1, T
List1.AddItem T
Next i
For j = 1 To a
Input #1, B
List2.AddItem B
Next j
T = 0
B = 0
For i = 1 To a
T = T + List1.List(i - 1)
B = B + List2.List(i - 1)
If (B >= 1000 And T >= 1000) Then C = "Same": Print #2, C: Exit For
If (T >= 1000 And T > B) Then C = "Turtle": Print #2, C: Exit For
If (B >= 1000 And B > T) Then C = "Rabbit": Print #2, C: Exit For
If ((T < 1000 And B < 1000) And (i = a)) Then C = "Unknow": Print #2, C: Exit For
Next i
List1.Clear
List2.Clear
Loop
Close #2
Close #1
End
End Sub
用新教的
回覆刪除因為用陣列
不知道會有幾個
list有得研究:D
緣尉好,
回覆刪除先為你加油。
If i = n Then Print #2, "Unknow"
這行我喜歡,很好的判斷。
佑好,
你也很好,開始用新的東西,多練習多熟悉這個好工具。
但是,unknow的判斷,你多了那兩個不需要的條件。
在心裡的logic的推演,多練習。
熊掌好,
回覆刪除所以我可以直接:)
C = "Unknow": Print #2, C:exit for
佑好,
回覆刪除你今天狀態不好哦,連改連錯哦。
If ((T < 1000 And B < 1000) And (i = a)) Then C = "Unknow": Print #2, C: Exit For
只是改成
if i=a then c="Unknow": ? #2,c:exit for
熊掌好,
回覆刪除對好a還沒到i就一直被改。
連改連錯,寫程式要腦袋清晰才行=D
Dim R, T
回覆刪除Private Sub Form_Load()
Me.Hide
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
If n <> 0 Then
Line Input #1, RR
Line Input #1, TT
R = Split(RR)
T = Split(TT)
Call A1(n)
End If
Loop
Close
Close
End
End Sub
Sub A1(a)
Dim RR%, TT%
For i = 0 To a - 1
RR = RR + Val(R(i))
TT = TT + Val(T(i))
If RR >= 1000 And TT >= 1000 Then Print #2, "Same": Exit Sub
If RR >= 1000 And TT < 1000 Then Print #2, "Turtle": Exit Sub
If RR < 1000 And TT >= 1000 Then Print #2, "Rabbit": Exit Sub
Next
Print #2, "Unknow"
End Sub
5:43