有個富翁,手上有 N 間房子,想要分送給一些朋友。例如 N = 5,那有以下的七種分法:
5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
然而,在富翁所在的國家,偶數被視為是不吉利的。因此,送偶數間的房子給朋友,是禁忌的行為,因此富翁實際上只有三種可行的分法:
5
3 + 1 + 1
1 + 1 + 1 + 1 + 1
給定任意的正整數 N (介於 1 到 750 間),請幫富翁算算到底有多少種可行的分法?
5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
然而,在富翁所在的國家,偶數被視為是不吉利的。因此,送偶數間的房子給朋友,是禁忌的行為,因此富翁實際上只有三種可行的分法:
5
3 + 1 + 1
1 + 1 + 1 + 1 + 1
給定任意的正整數 N (介於 1 到 750 間),請幫富翁算算到底有多少種可行的分法?
輸入說明 :
輸入檔的第一行有一個正整數 M,代表有 M 組測試資料。以下的 M 行各有一個正整數 N。
輸出說明 :
對於每一組測試資料 N,輸出有幾種可行的(不含偶數的)分法。
範例輸入 :
1
5
2
5
4
範例輸出 :
3 3 2
貼文 BY 阿揚
Private Sub Form_Load()
回覆刪除Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Me.Hide
Do Until EOF(1)
Input #1, x
For i = 1 To x
Input #1, y
k = 0
Call check(y, y - 1, "", k)
Print #2, k,
Print
Next i
Loop
End
Close #2
Close #1
End Sub
Sub check(ByVal a, ByVal b, ByRef c As String, k)
If a = 0 Then
If InStr(c, "2") = 0 Then
k = k + 1
End If
Else
For i = b To 1 Step -1
If (a - i) >= 0 Then Call check(a - i, i, c & i, k)
Next i
End If
End Sub
by 阿揚
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
While Not EOF(1)
Input #1, Q
For i = 1 To Q
LS.Clear
Input #1, x
If x Mod 2 <> 0 Then LS.AddItem x
Call Check(x, x - 1, "")
Print #2, LS.ListCount
Next i
Print #2,
Wend
Close #2
Close #1
End
End Sub
Sub Check(ByVal a, ByVal b, ByRef c As String)
If a = 0 Then
For i = 1 To Len(c)
aa = Val(Mid(c, i, 1))
If aa Mod 2 = 0 Then GoTo isN
Next i
LS.AddItem c
isN:
End If
For i = b To 1 Step -1
If a - i >= 0 Then Call Check(a - i, i, c & i)
Next i
End Sub
By小白
Private Sub Form_Load()
回覆刪除Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Me.Hide
Do Until EOF(1)
Input #1, x
For i = 1 To x
Input #1, y
k = 0
If y Mod 2 <> 0 Then k = k + 1
Call check(y, y - 1, "", k)
Print k,
Print
Next i
Loop
Close #2
Close #1
End
End Sub
Sub check(ByVal a, ByVal b, ByRef c As String, k)
If a = 0 Then
o = True
For i = 1 To Len(c)
If Val(Mid(c, i, 1)) Mod 2 = 0 Then o = False: Exit For
Next i
If o Then k = k + 1
Else
For i = b To 1 Step -1
If (a - i) >= 0 Then Call check(a - i, i, c & i, k)
Next i
End If
End Sub
BY 阿楊
發現嚴重錯誤!!! 上面對純屬巧合=口="
阿揚,
回覆刪除你的題目的輸入輸出,是錯的吧。再檢查看看。
熊掌