2010年3月23日 星期二

形狀問題 (shape)

某販賣積木玩具公司為了慶祝十週年紀念,於度假村舉行慶祝酒會,並於會場不同地點的正方形水泥地上,利用填滿聖誕紅花盆的方式,佈置出不同的幾何形狀。有一個盲人,很想知道某個地點佈置的形狀,請你幫他做成點字板,並將結果顯示出來,其中有花盆的地方用"*"代表,水泥地則用"0"代表。請寫一個程式,判斷點字板上所表示的花盆組成形狀為何。
條件限制
點字板邊長N最少為2最多為30。
形狀一定為凸多邊形,且最多為十邊形。

輸入檔格式 (c:\shape\input.txt)
第一行為一正整數N,表示一個NN的資料矩陣;接下來的N行顯示地面上的狀況,"0"表示水泥地,"*"表示有花盆的地方,每個檔案,只有一個相連整體的形狀。

輸出檔格式 (c:\shape\output.txt)
請列出此佈置地點的形狀名稱,例如:三邊形、四邊形、五邊形…等等。

輸入範例
8
00000000
00*00000
0****000
*******0
00****00
00000000
00000000
00000000

輸出範例
五邊形

1 則留言:

  1. Dim stri(100, 100) As String
    Private Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, q

    For i = 1 To q
    Line Input #1, step
    For j = 1 To Len(step)
    stri(i, j) = Mid(step, j, 1)
    Next j
    Next i
    For i = 1 To q
    For j = 1 To q
    If stri(i, j) = "*" Then
    If stri(i, j - 1) = "0" Or stri(i, j - 1) = "" Then
    lleft = lleft & j & i
    End If
    If stri(i, j + 1) = "0" Or stri(i, j + 1) = "" Then
    lright = lright & j & i
    Exit For
    End If
    End If
    Next j
    Next i
    n = 0
    For i = 2 To Len(lleft) \ 2
    nx = Val(Mid(lleft, i * 2 - 1, 1))
    ny = Val(Mid(lleft, i * 2, 1))
    ox = Val(Mid(lleft, (i - 1) * 2 - 1, 1))
    oy = Val(Mid(lleft, (i - 1) * 2, 1))
    If Abs((nx - ox) \ (ny - oy)) <> step Then
    step = Abs((nx - ox) \ (ny - oy))
    n = n + 1
    End If
    Next i
    step = 0
    For i = 2 To Len(lright) \ 2
    nx = Val(Mid(lright, i * 2 - 1, 1))
    ny = Val(Mid(lright, i * 2, 1))
    ox = Val(Mid(lright, (i - 1) * 2 - 1, 1))
    oy = Val(Mid(lright, (i - 1) * 2, 1))
    If Abs((nx - ox) \ (ny - oy)) <> step Then
    step = Abs((nx - ox) \ (ny - oy))
    n = n + 1
    End If
    Next i
    '------------------
    X1 = Val(Mid(lright, 1, 1))
    X2 = Val(Mid(lleft, 1, 1))
    Y1 = Val(Mid(lright, Len(lright) - 1, 1))
    Y2 = Val(Mid(lleft, Len(lleft) - 1, 1))
    If X1 <> X2 Then n = n + 1
    If Y1 <> Y2 Then n = n + 1

    Print #2, n
    Close #2
    Close #1
    End Sub

    回覆刪除