2012年8月3日 星期五

保齡球計分板

在世界各地,保齡球是相當受歡迎的運動項目之一,藉著球道上滾動的球,來碰倒球道上的球瓶,勝負以擊倒球瓶之多寡的計分來判定。請你根據下面的計分規則,寫一個保齡球計分程式,規則如下:
一、每一局共10 格,依序完成每1 格。
二、每格的分數將累計到下1 格。
三、第1 至9 格之計分:每1 格在2 球以內,將全部10 個球瓶擊倒為原則,分數計
算方式可分為:
1. 全倒(Strike):第1 球就將全部球瓶擊倒,即完成一格。分數計算分式為10 分,再加上下2 球的擊倒瓶數。
2. 補全倒(Spare):第1 球未全倒時,再打1 球將剩餘球瓶全部擊倒。分數計算方式為10 分,再加下1 球的擊倒瓶數。
3. 打完第 1 球後,第2 球如未將剩餘之球瓶全部擊倒,分數為第1 球加第2 球擊倒之球瓶數。
四、第10 格計分方法:如果前2 球為全倒或補全倒,可再加打1 球,最多打3 球。
五、計分劃記的符號代表意義如下:
1. 全倒以記號『X』來代表。
2. 補全倒以記號『/』來代表。
3. 數字代表擊倒的球數。
4. 擊倒球數為 0 時以『-』來代表。

舉例來說:
每格擊球 7- 8/ X 8- X X X X X 8/9
分數 7 27 45 53 83 113 143 171 191 210
輸入說明:
第一行的數字,表示有幾個計分板要計分,第二行開始的每一行,為一個獨立的計分板。
每一行包含10 格擊球結果。每格以一個空白作為區隔。
輸出說明:
對輸入的每個計分板,分別計算出後的總分數。
輸入範例:
2
7- 8/ X 8- X X X X X 8/9
X X X X X X X X X XXX
輸出範例:
210
300

2 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Dim b(21, 3) As String
    Dim c(21, 3) As Integer
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    For k = 1 To n
    Line Input #1, x
    a = Split(x, " ")
    For i = 1 To 3
    For j = 0 To UBound(a)
    e = Mid(a(j), i, 1)
    If e = " " Then e = 0
    b(j, i) = e
    If e = "X" Or e = "/" Then e = 10
    If e = "-" Then e = 0
    c(j, i) = Val(e)
    Next
    Next
    ans = 0
    i = 0
    For j = 0 To UBound(a)
    If j = 0 Then i = i + 1
    If b(j, i) <> "X" And b(j, 2) <> "/" And b(j, i) <> "-" Then ans = ans + c(j, i)
    If b(j, 2) = "/" Then
    If j + 1 > UBound(a) Then
    ans = ans + 10 + c(j, 3)
    Else
    ans = ans + 10 + c(j + 1, 1)
    End If
    End If
    If b(j, 1) = "X" And b(j + 1, 1) <> "X" Then
    If j = UBound(a) Then
    ans = ans + c(j, 1) + c(j, 2) + c(j, 3)
    Else
    If b(j + 1, 2) = "/" Then
    ans = ans + c(j, 1) + 10
    Else
    ans = ans + c(j, 1) + c(j + 1, 1) + c(j + 1, 2)
    End If
    End If
    End If
    If b(j, 1) = "X" And b(j + 1, 1) = "X" Then
    If j + 2 > UBound(a) Then
    ans = ans + c(j, 1) + c(j + 1, 1) + c(j + 1, 2)
    Else
    ans = ans + c(j, 1) + c(j + 1, 1) + c(j + 2, 1)
    End If
    End If
    Next
    Print #2, ans
    Next
    Close
    Close
    End
    End Sub

    回覆刪除
  2. 發現題目若沒看清楚的話,那麼程式寫不出正確結果來,所以下次要更仔細看清楚題目。

    回覆刪除