2011年8月2日 星期二

大朋友下樓梯

內容 : 
傳說,有個遊戲叫做大朋友下樓梯,這個遊戲有三種難度,簡單中等困難。

三種難度的差別是,簡單的難度大朋友一次只能下樓梯 1格

中等的是則是,大朋友一次可以下樓梯 1格或 2格

困難的比較具有挑戰性,大朋友一次可以下 1格、 2格或 3格


現在我們想知道,大朋友有幾種下樓梯的方法可以走到地下k樓

對了,有一個限制是,大朋友不能上樓梯只能下樓梯
輸入說明 :
給定兩個正整數 t, k , t代表遊戲難度,值為1~3 分別代表,簡單中等困難。

k則是一個負數,代表地下k樓(0>k>-20)

包含多筆測試資料。
輸出說明 :
輸出大朋友走到地下K層後的方法數。
範例輸入 : 
1 -1 
1 -2 
2 -1 
2 -2 
2 -3 
2 -4 
3 -1 
3 -2 
3 -3 
 
範例輸出 :
4

5 則留言:

  1. 簡單的遞迴

    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

    回覆刪除
  2. 佑好,
    1.函數要用名字傳回值,副程式只是不用。所以你的abc是用sub,而不是function。
    2.程式結果正確。

    回覆刪除
  3. 熊掌好,

    沒有注意到:P,會特別注意的

    謝老師

    回覆刪除
  4. 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有點多餘

    回覆刪除
  5. 佑、arro好,
    兩個的程式都正確。

    回覆刪除