2011年2月22日 星期二

費氏數

由"in.txt"讀取一數字n求出第n個費氏數,費氏數定義如下:
0,當n=0時
f(n)= 1,當n=1時
f(n-1)+f(n-2),當n>=2時
在此列舉一串數列:0、1、1、2、3、5、8、13、21、34、55、89、144、233,這些就是由0<=n<=13所組成的費氏數。
※(0<=n<=1000)

輸入範例:8

輸出範例:21

出自 http://chscvb.blogspot.com/2010/01/20100122.html

11 則留言:

  1. Dim a As Byte
    Dim b(10) As Integer
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Input #1, a
    Close #1

    b(1) = 1
    For i = 2 To a
    b(i) = b(i - 1) + b(i - 2)
    Next i

    Open App.Path & "\out.txt" For Output As #2
    Print #2, b(a)
    Close #2

    End
    End Sub

    回覆刪除
  2. 佑好,
    題目說是※(0<=n<=1000)
    但是,你的程式只能做到n=10
    所以,錯。

    回覆刪除
  3. 熊掌好,
    改了
    Dim a as Integer
    Dim b(1000) as Double
    加起來的數十分可觀
    原本想用list來相加但又想到內容型態是字串

    Dim a As Integer
    Dim b(1000) As Double
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Input #1, a
    Close #1

    b(1) = 1
    For i = 2 To a
    b(i) = b(i - 1) + b(i - 2)
    Next i

    Open App.Path & "\out.txt" For Output As #2
    Print #2, b(a)
    Close #2

    End
    End Sub

    回覆刪除
  4. 佑好,
    1.這樣改,理論是沒錯,但是,做得到1000嗎?試過嗎?
    2.用listbox的字串,有兩個方式可以解決數字,val(字串)==>數值。
    另外,就是直接用字串去一個字一個字地「數字加」,加成一個大的數字的字串。
    第二個方法就是所謂的「大數加法」,你們前面有一題做「進位」的,就已經是「大數加法」的入門了。改天可以試試。

    回覆刪除
  5. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt." For Input As #1
    Open App.Path & "\out.txt" For Output As #2

    Input #1, ins

    a = 1: b = 0
    For i = 1 To ins - 1
    ans = a + b: b = a: a = ans
    Next

    Print #2, ans

    Close
    Close
    End
    End Sub


    // 不用用到陣列 就能完成這一題吧

    回覆刪除
  6. 熊掌好

    是累加嘛!!?

    arro就是這樣寫的

    回覆刪除
  7. arro好,
    程式正確,用三個變數間的變化來解這題,很好。
    但是,有沒有試過,可以做到n等於多少呢?

    佑好,
    以累加來說,也可以。
    反正,就是每一項費式數,等於,前兩項費式數的和。

    回覆刪除
  8. Private Sub Form_Load()
    Me.Hide
    Dim d(1000) As Long
    Open App.Path & "\out.txt" For Output As #2
    Open App.Path & "\in.txt" For Input As #1

    Input #1, n

    d(0) = 0
    d(1) = 1
    For i = 2 To n
    d(i) = d(i - 1) + d(i - 2)
    Next

    Print #2, d(n)

    Close #1
    Close #2
    End
    End Sub

    回覆刪除
  9. Private Sub Form_Load()
    Me.Hide
    Dim d(1000) As Long
    Open App.Path & "\out.txt" For Output As #2
    Open App.Path & "\in.txt" For Input As #1
    Input #1, n

    Print t(n)
    Close #1
    Close #2
    End
    End Sub
    Function t(a1)
    If a1 > 1 Then t = t(a1 - 1) + t(a1 - 2) Else t = a1
    End Function

    回覆刪除
  10. 緣尉好,
    程式ok,後面這個解,變數a1,不如用a,比較不容易打錯或誤解。

    回覆刪除
  11. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, n
    Call A1(n)
    Close
    Close
    End
    End Sub

    Sub A1(a)
    Dim b%, c%, t%
    b = 0
    c = 1
    For i = 1 To a
    b = b + c
    c = t
    t = b
    Next
    Print #2, b
    End Sub


    2:29

    回覆刪除