某個菜攤最多有 8種類型的商品出售。當類型齊全時,該 8種商品依序包括「肉」、「菜」、「蛋」、「果」、「魚」、「蝦」、「豆」及「菇」。假設當菜攤進了
n種類型商品,即表示菜攤進了 8種商品中的前 n種類型商品(例如:菜攤進了 3種類型商品,表示進了「肉」、「菜」及「蛋」等 3種商品。)。今將此 n類商品由左至右分類排列,但是:「肉果」、「肉豆」、「肉菇」、「菜蛋」、「菜魚」、「菜豆」、「菜菇」、「蛋果」、「蛋蝦」、「蛋菇」、「果魚」、「果豆」、「果菇」、「魚蝦」、「魚豆」、「魚菇」、「蝦豆」、「豆菇」此
18種商品組合,兩兩不可左右緊鄰放置(其間沒有擺設其他商品)。以第 1組「肉果」為例,「肉」不可放在「果」的「正左邊」或「正右邊」,而兩者之間沒有其他任何商品。在給定
n的條件下,請輸出共有那些商品排列方式。
輸入說明:第 1行的數字表示商品進貨種類 n,而 n的值介於 1和 8之間。
輸出說明:從第 1行起每行輸出 1組符合條件的「商品排列」,每行輸出的「商品排列」間不限制是否有空白相隔,各種排列方式的輸出順序不限。最後 1行輸出總共有多少種排列方式(只輸出數字即可)。
輸入檔案 1:【檔名:in1.txt】3
輸入檔案 2:【檔名:in2.txt】
4
輸出檔案:【檔名:out.txt】
菜肉蛋
蛋肉菜
2
蛋肉菜果
果菜肉蛋
2
Dim X() As String
回覆刪除Dim Y() As String
Private Sub Form_Load()
Me.Hide
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
X = Split("佔 肉 菜 蛋 果 魚 蝦 豆 菇")
Y = Split("肉果 肉豆 肉菇 菜蛋 菜魚 菜豆 菜菇 蛋果 蛋蝦 蛋菇 果魚 果豆 果菇 魚蝦 魚豆 魚菇 蝦豆 豆菇 果肉 豆肉 菇肉 蛋菜 魚菜 豆菜 菇菜 果蛋 蝦蛋 菇蛋 魚果 豆果 果菇 蝦魚 豆魚 菇魚 豆蝦 菇豆")
'------------------------------in1
Input #1, N
List1.Clear
Call ABC("", N)
Call check
ans = 0
For i = 0 To List1.ListCount - 1
If List1.List(i) <> "" Then Print #3, List1.List(i): ans = ans + 1
Next i
Print #3, ans
'------------------------------in2
Print #3,
Input #2, N
List1.Clear
Call ABC("", N)
Call check
ans = 0
For i = 0 To List1.ListCount - 1
If List1.List(i) <> "" Then Print #3, List1.List(i): ans = ans + 1
Next i
Print #3, ans
Close #3
Close #2
Close #1
End
End Sub
Sub ABC(A, B)
If Len(A) = B Then
List1.AddItem A
Else
For i = 1 To B
If InStr(A, X(i)) = 0 Then Call ABC(A & X(i), B)
Next i
End If
End Sub
Function check()
P = True
For j = 0 To List1.ListCount - 1
For i = 0 To UBound(Y)
If InStr(List1.List(j), Y(i)) <> 0 Then List1.List(j) = ""
Next i
Next j
End Function
Dim s, p, ans
回覆刪除Private Sub Form_Load()
Me.Hide
Open App.Path & "\in1.txt" For Input As #1
Open App.Path & "\in2.txt" For Input As #2
Open App.Path & "\out.txt" For Output As #3
s = Split("肉 菜 蛋 果 魚 蝦 豆 菇")
Input #1, n
Call A1(n, "")
Call A2
Print #3, ans
Print #3, " "
List1.Clear: ans = 0
Input #2, n
Call A1(n, "")
Call A2
Print #3, ans
Close
Close
Close
End
End Sub
'肉果 肉豆 肉菇 菜蛋 菜魚 菜豆 菜菇 蛋果 蛋蝦 蛋菇 果魚 果豆 果菇 魚蝦 魚豆 魚菇 蝦豆 豆菇
Sub A1(a, b)
If Len(b) = a Then
List1.AddItem b
Else
For i = 0 To a - 1
If InStr(b, s(i)) = 0 Then Call A1(a, b & s(i))
Next
End If
End Sub
Sub A2()
p = Split("肉果 肉豆 肉菇 菜蛋 菜魚 菜豆 菜菇 蛋果 蛋蝦 蛋菇 果魚 果豆 果菇 魚蝦 魚豆 魚菇 蝦豆 豆菇 果肉 豆肉 菇肉 蛋菜 魚菜 豆菜 菇菜 果蛋 蝦蛋 菇蛋 魚果 豆果 菇果 蝦魚 豆魚 菇魚 豆蝦 菇豆")
For i = 0 To List1.ListCount - 1
k = List1.List(i)
'MsgBox k
For x = 0 To UBound(p)
If InStr(k, p(x)) <> 0 Then List1.List(i) = "": Exit For
Next
If Len(Trim(List1.List(i))) <> 0 Then Print #3, List1.List(i): ans = ans + 1
Next
End Sub