2010年10月22日星期五

棒球九宮格

內容 : 
小明很喜歡棒球。某天晚上跟媽媽到家裡附近逛夜市,突然發現多了一個棒球九宮格的遊戲攤位(如圖一)。遊戲規則如下:一開始九宮格內會分別擺上一個木板,玩家站在距離九宮格板數公尺外,總共可以丟出九顆球。被命中的格子裡的木板會倒下;若球丟出範圍外,或是剛好丟在九宮格的框架上,則所有格子都會維持原樣。一旦將球丟出去,可用的球數就減少一,直到將九顆球丟完為止。

九顆球都丟完之後,夜市的老闆會根據倒下的格子來檢查連成幾條線,以決定獎品的好壞。依照老闆的規定,只要以下其中一組格子裡的木板同時倒下,則算連成一線:{1,2,3}、{4,5,6}、{7,8,9}、{1,4,7}、{2,5,8}、{3,6,9}。舉例來說,若2、3、5、7、8、9這六個格子中的木板都倒下,則2、5、8連成一線,且7、8、9也連成一線,總共連成兩條線。(請注意,依規則3、5、7不算連成一線。)此外,老闆也會根據丟到的格子號碼,計算"加碼積分",提供額外的獎賞,詳細規則如下:丟到5號得2分,丟到{2、4、6、8}中的任一號碼得5分,丟到{1、3、7、9}中的任一號碼得8分。例如若2、5、8、9這四格被丟中,則加碼積分為20分。請注意,重複丟到的號碼只算一次分數。
請寫一個程式來模擬玩棒球九宮格的遊戲。為了方便貣見,我們將用二維座標來定義九宮格的位置,如圖二所示。每一格都是相同大小的正方形,7號格左下角的座標為(0,0),3號格右上角座標為(30,30)。在模擬的過程中,會提供每一顆球丟在九宮格上的座標位置。為了簡化問題,若某顆球丟在九宮格上的座標位於某一格內,則判斷打到該格;如果座標位於某一格的邊上,則判斷為打到框架,沒有任何格子被打到。舉例來說,假設一顆球丟到座標位置為(7,13)的地方,由於落在4號格之內,判定打到4號格;假設有另一顆球打在(10,2)(或(10,20))的座標位置,則因為落在框架上,沒有任何格子被打到。當然如果座標落在九宮格外的區域,也沒有任何格子被丟中。
輸入說明 :
輸入總共有9行。每一行有兩個整數x和y (-20 <= x,y <= 50,x與y由一個空白隔開),代表球的座標。
輸出說明 :
請輸出丟出9顆球之後,根據夜市老闆的規則總共連成幾條線;另外請根據丟到的格子號碼,算出加碼積分。
範例輸入 :
輸入範例1: 
7 13 
10 2 
5 8 
-9 19 
11 35 
3 23 
18 0 
0 18 
40 22 
輸入範例2: 
12 22 
15 11 
3 20 
3 22 
33 27 
28 28 
16 5 
22 -5 
35 35 
範例輸出 :

輸出範例1: 
1 21 
輸出範例2: 
2 28

2 則留言:

  1. Dim num(3, 3) As Integer
    Public Sub Form_Load()
    Open App.Path & "/in.txt" For Input As #1
    Open App.Path & "/out.txt" For Output As #2
    num(0, 2) = 8: num(1, 2) = 5: num(2, 2) = 8
    num(0, 1) = 5: num(1, 1) = 2: num(2, 1) = 5
    num(0, 0) = 8: num(1, 0) = 5: num(2, 0) = 8
    For i = 1 To 9
    Input #1, x, y
    x = x / 10: y = y / 10
    If Int(x) = x Or Int(y) = y Or x >= 3 Or y >= 3 Or x < 0 Or y < 0 Then
    Else
    x = Int(x): y = Int(y)
    ans = ans + num(x, y)
    num(x, y) = 0
    End If
    Next i
    q = 0
    For i = 0 To 2
    kk = 0: k = 0
    For j = 0 To 2
    kk = kk + num(i, j)
    k = k + num(j, i)
    Next j
    If kk = 0 Then q = q + 1
    If k = 0 Then q = q + 1
    Next i
    Print #2, q, ans
    Close #2
    Close #1
    End Sub

    ㄚ揚

    回覆刪除
  2. Dim Board(3, 3) 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
    Board(3, 1) = 8: Board(3, 2) = 5: Board(3, 3) = 8
    Board(2, 1) = 5: Board(2, 2) = 2: Board(2, 3) = 5
    Board(1, 1) = 8: Board(1, 2) = 5: Board(1, 3) = 8
    For AL = 1 To 9
    Input #1, X, Y
    X = X / 10: Y = Y / 10
    If X >= 0 And Y >= 0 And X <= 3 And Y <= 3 Then
    If Int(X) <> X And Int(Y) <> Y And Board(X, Y) < 10 Then
    X1 = Int(X) + 1: Y1 = Int(Y) + 1
    Sum = Sum + Board(X1, Y1)
    Board(X1, Y1) = Board(X1, Y1) + 10
    End If
    End If
    Next AL
    For I = 1 To 3
    If Board(I, 1) > 10 And Board(I, 2) > 10 And Board(I, 3) > 10 Then sum1 = sum1 + 1
    If Board(1, I) > 10 And Board(2, I) > 10 And Board(3, I) > 10 Then sum1 = sum1 + 1
    Next I
    Print #2, sum1 & " " & Sum
    Close #2
    Close #1
    End
    End Sub


    BY小白

    回覆刪除