在世界各地,保齡球是相當受歡迎的運動項目之一,藉著球道上滾動的球,來碰倒球道
上的球瓶,勝負以擊倒球瓶之多寡的計分來判定。請你根據下面的計分規則,寫一個保齡球
計分程式,規則如下:
一、每一局共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
第一次看文章以為是
回覆刪除加"上下兩球擊倒瓶數",想說奇怪跟平常不一樣
原來是
加上"下兩球擊倒瓶數":P
Private Sub Form_Load()
'Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, n
For j = 1 To n
List1.Clear: List2.Clear
Dim Z As Byte: Dim ZZ As Byte: Dim ZZZ As Byte
Z = 0: ZZ = 0: ZZZ = 0 '第一個Z計局數,第二個Z計完成單局沒,第三個Z計第九局最後位子
Line Input #1, X
Y = Replace(X, " ", "")
For i = 1 To Len(Y)
A = Mid(Y, i, 1)
Select Case A
Case 1 To 9: List1.AddItem A: List2.AddItem "-": ZZ = ZZ + 1
Case "-": List1.AddItem 0: List2.AddItem "-": ZZ = ZZ + 1
Case "X": List1.AddItem 10: List2.AddItem "X": ZZ = 0: Z = Z + 1
Case "/": List1.AddItem (10 - Val(List1.List(i - 2))): List2.AddItem "/": ZZ = 0: Z = Z + 1
End Select
If ZZ = 2 Then Z = Z + 1: ZZ = 0
If Z = 9 Then ZZZ = (i - 1)
Next i
Sum = 0
For i = 0 To ZZZ
A = List2.List(i)
If A = "/" Then Sum = Sum + Val(List1.List(i + 1))
If A = "X" Then Sum = Sum + Val(List1.List(i + 1)) + Val(List1.List(i + 2))
Next i
For i = 0 To (List1.ListCount - 1)
Sum = Sum + Val(List1.List(i))
Next i
Print #2, Sum
Next j
Close #2
Close #1
'End
End Sub
in.txt
回覆刪除3
7- 8/ X 8- X X X X X 8/9
X 9/ X 7/ X 2/ X 5/ X 1/X
X X X X X X X X X XXX
out.txt
210
200
300
Dim n, m As String, P As Integer
回覆刪除Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Input #1, Ti
For i = 1 To Ti
P = 0: List1.Clear
Line Input #1, m
n = Split(m)
Call run
Call cnt
Print #2, P
Next
Close
Close
End
End Sub
Sub cnt()
Dim NowAt
NowAt = 0
For i = 0 To 9
For j = 1 To Len(n(i))
k = Mid(n(i), j, 1)
Select Case k
Case "/": If Len(n(i)) < 3 Then P = P + List1.List(NowAt) + List1.List(NowAt + 1): NowAt = NowAt + 1
Case "X": If Len(n(i)) < 3 Then P = P + List1.List(NowAt) + List1.List(NowAt + 1) + List1.List(NowAt + 2): NowAt = NowAt + 1
Case Else: If Len(n(i)) < 3 Then P = P + List1.List(NowAt): NowAt = NowAt + 1
End Select
If Len(n(i)) = 3 Then P = P + List1.List(NowAt) + List1.List(NowAt + 1) + List1.List(NowAt + 2): Exit For
Next
Print P & " " & n(i)
Next
End Sub
Sub run()
For i = 0 To 9
For j = 1 To Len(n(i))
k = Mid(n(i), j, 1)
Select Case k
Case "-": List1.AddItem 0
Case "/": List1.AddItem (10 - tmp)
Case "X": List1.AddItem 10
Case Else: List1.AddItem k
End Select
tmp = k
Next
Next
End Sub
<<<<<<<<<<<<<<<<<<<<<<<<
輸入:
2
7- 8/ X 8- X X X X X 8/X
-- -- -- -- -- -- -- -- -- --
輸出:
211
0
這一題又出現了!!!
回覆刪除那時候我還上網查保齡球規則哩@@