2011年2月10日 星期四

龜兔賽跑

「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

11 則留言:

  1. 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 感覺不是說很好

    回覆刪除
  2. arro好,
    1.程式可以。
    2.題目的兩個文字錯誤,去改一下吧。(同一分鐘,當n等於0時,)
    3.是的,你用了很多的goto,不是好習慣。
    4.像是可以用 do until n = 0 ....loop,之類的方式,而少用goto
    5.是的,其它的隊員,加油。還有3天,寒假就結束了,多做幾題吧。

    回覆刪除
  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

    回覆刪除
  4. 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

    回覆刪除
  5. 用新教的
    因為用陣列
    不知道會有幾個
    list有得研究:D

    回覆刪除
  6. 緣尉好,
    先為你加油。
    If i = n Then Print #2, "Unknow"
    這行我喜歡,很好的判斷。

    佑好,
    你也很好,開始用新的東西,多練習多熟悉這個好工具。
    但是,unknow的判斷,你多了那兩個不需要的條件。
    在心裡的logic的推演,多練習。

    回覆刪除
  7. 熊掌好,

    所以我可以直接:)

    C = "Unknow": Print #2, C:exit for

    回覆刪除
  8. 佑好,
    你今天狀態不好哦,連改連錯哦。
    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

    回覆刪除
  9. 熊掌好,

    對好a還沒到i就一直被改。

    連改連錯,寫程式要腦袋清晰才行=D

    回覆刪除
  10. 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

    回覆刪除