某販賣積木玩具公司為了慶祝十週年紀念,於度假村舉行慶祝酒會,並於會場不同地點的正方形水泥地上,利用填滿聖誕紅花盆的方式,佈置出不同的幾何形狀。有一個盲人,很想知道某個地點佈置的形狀,請你幫他做成點字板,並將結果顯示出來,其中有花盆的地方用"*"代表,水泥地則用"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
輸出範例
五邊形
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