2012年8月13日 星期一

戰艦謎題

內容 :
在一個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.

1 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Dim a(100, 1), b(100, 1)
    Dim e As Boolean
    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, w, x, y, z
    d = 0
    For i = 0 To w
    For j = 0 To w
    If (w - j) - i = 0 Then a(i, 0) = i: a(i, 1) = j: d = d + 1
    Next
    Next
    c = 0
    For i = 0 To x
    For j = 0 To x
    If (x - j) - i = 0 Then b(i, 0) = i: b(i, 1) = j: c = c + 1
    Next
    Next
    e = False

    For i = 0 To d
    For j = 0 To d
    If a(i, 0) + b(j, 0) = y Then
    If a(i, 1) + b(j, 1) = z Then
    e = True
    f = i
    f1 = j
    End If
    End If
    Next
    If e = True Then Exit For
    Next
    If e = True Then
    Print #2, a(f, 0) & " " & a(f, 1) & " " & b(f1, 0) & " " & b(f1, 1)
    Else
    Print #2, "No solutions."
    End If
    Loop
    Close
    Close
    End
    End Sub

    回覆刪除