內容 :
在一個2x2的格子圖形中,有三艘各佔一個格子的戰艦,戰艦的位置均在格子的範圍內。三艘戰艦重量皆不同,從1噸到3噸各有一艘,因為大霧瀰漫不知正確位置,僅知道每一列與每一行的總重量,請問聰明的你,知道每一艘戰艦的正確位置嗎?
舉例來說,如果我們知道每一列與每一行的總重量如下圖:
囗囗5
囗囗1
42
那麼這個戰艦謎題的一組正確答案如下圖:
325
101
42
注意:我們給的輸入資料不一定只有一組正確答案,這時候你只需輸出其中一組正確答案即可。此外,我們給的輸入資料有可能沒有正確的答案,這時候只需輸出"No solutions."即可。
輸入說明 :
總共有四個整數,每個數值間以一個空白字元隔開,這些數字個值均介於0到5之間。前2個整數依序表示每一列(row)的總重量,接下來的2個整數依序表示每一行(column)的總重量。
輸出說明 :
請輸出4個整數,分成兩列,每列含有2個整數,整數中間以一個空白隔開,表示2x2的格子中,停在每個位置的戰艦重量。其中以0表示沒有戰艦。(範例一就是上圖的例子)如果沒有解答請輸出 "No solutions."
範例輸入 :
輸入範例一:
5 1 4 2
輸入範例二:
3 3 1 5
輸入範例三:
3 2 3 4
範例輸出 :
輸出範例一:
3 2 1 0
輸出範例二:
0 3 1 2
輸出範例三:
No solutions.
Dim a, b, c, d, x1, x2, x3, x4 As Integer
回覆刪除Dim havedo As Boolean
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do
Input #1, x1, x2, x4, x3
For a = 0 To 3
If x1 + x2 <> x3 + x4 Then Print #2, "No solutions.": Exit For
For b = 0 To 3
For c = 0 To 3
If a = b Then Exit For
For d = 0 To 3
If b = c Or a = c Then Exit For
If a + b = x1 And c + d = x2 And a + c = x4 And b + d = x3 And havedo = False Then havedo = True: Print #2, a & " " & b & " " & c & " " & d
Next
Next
Next
Next
havedo = False
Loop Until EOF(1)
Close #2
Close #1
End
End Sub
Dim s, t As Integer
回覆刪除Dim tof As Boolean
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do While Not EOF(1)
Input #1, X1, X2, Y1, Y2
If X1 + X2 <> Y1 + Y2 Then Print #2, "No solutions."
For i = 0 To 3
tof = True
For j = 0 To 3
If i <> j Then
If i + j = X1 Then s = Y1 - i: t = Y2 - j
If s + t = X2 Then
If s >= 0 And t >= 0 Then Print #2, i & " " & j & " " & s & " " & t: tof = False: Exit For
End If
End If
Next j
If tof = False Then Exit For
Next i
Loop
Close #2
Close #1
End
End Sub