內容 :
傳說,有個遊戲叫做大朋友下樓梯,這個遊戲有三種難度,簡單中等困難。
三種難度的差別是,簡單的難度大朋友一次只能下樓梯 1格
中等的是則是,大朋友一次可以下樓梯 1格或 2格
困難的比較具有挑戰性,大朋友一次可以下 1格、 2格或 3格
現在我們想知道,大朋友有幾種下樓梯的方法可以走到地下k樓
對了,有一個限制是,大朋友不能上樓梯只能下樓梯
三種難度的差別是,簡單的難度大朋友一次只能下樓梯 1格
中等的是則是,大朋友一次可以下樓梯 1格或 2格
困難的比較具有挑戰性,大朋友一次可以下 1格、 2格或 3格
現在我們想知道,大朋友有幾種下樓梯的方法可以走到地下k樓
對了,有一個限制是,大朋友不能上樓梯只能下樓梯
輸入說明 :
給定兩個正整數 t, k , t代表遊戲難度,值為1~3 分別代表,簡單中等困難。
k則是一個負數,代表地下k樓(0>k>-20)
包含多筆測試資料。
k則是一個負數,代表地下k樓(0>k>-20)
包含多筆測試資料。
輸出說明 :
輸出大朋友走到地下K層後的方法數。
範例輸入 :
1 -1
1 -2
2 -1
2 -2
2 -3
2 -4
3 -1
3 -2
3 -3
範例輸出 :
1
1
1
2
3
5
1
2
4
簡單的遞迴
回覆刪除Dim ans As Integer
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, T, K
K = Abs(K)
ans = 0
Call ABC(T, K)
Print #2, ans
Loop
Close #2
Close #1
End
End Sub
Function ABC(A, ByVal B)
If B = 0 Then
ans = ans + 1
Else
For i = 1 To A
If B - i >= 0 Then Call ABC(A, B - i)
Next i
End If
End Function
佑好,
回覆刪除1.函數要用名字傳回值,副程式只是不用。所以你的abc是用sub,而不是function。
2.程式結果正確。
熊掌好,
回覆刪除沒有注意到:P,會特別注意的
謝老師
Dim t, k, ans
回覆刪除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, t, k
k = Abs(k)
ans = 0
Call run(k)
Print #2, ans
Loop
Close
Close
End
End Sub
Sub run(a)
If a = 0 Then
ans = ans + 1
Else
For i = 1 To t
If (a - i) >= 0 Then Call run(a - i)
Next
End If
End Sub
跟你的大同小異
你的ABC的A有點多餘
佑、arro好,
回覆刪除兩個的程式都正確。