2012年8月8日 星期三

門牌號碼

有一個程式設計師住在一條街上,這條街上的房子都在路的同一邊且門牌號碼是從1-2-3-4-....連續下來。有一天晚上他牽著他的狗出門散步,出門之後往左邊走,因為溜狗有點無聊,所以她順便把經過的房子的門牌號碼都加起來。隔天晚上他又出門溜狗,但這一次她往右走並且也把經過的門牌號碼加起來。讓他很驚訝的是:這兩次的數字竟然一樣。
當然,這個巧合現象跟這條街共有幾間房子(n),以及他住在第幾間房子(k)有關係。請寫出一個程式找出前十個滿足這樣條件的數對(k,n)。在輸出中有前2個這樣的數對。
每一對數字k,n的長度均為10,向右靠齊。請將檔案輸出至"out.txt"。 ※此題無須"in.txt"

輸出範例:
6 8
35 49

2 則留言:

  1. 跑好久,也只能跑到第六個。
    Private Sub Form_Load()
    Me.Hide
    Dim c, d As Double
    Open App.Path & "\out.txt" For Output As #1
    b = 1000
    c = 0
    e = 1
    Do
    b = b * 10
    For i = e To b
    c = c + i - 1
    d = 0
    For j = (i + 1) To b
    d = d + j
    If d = c Then Print #1, i & " " & j: a = a + 1
    If a >= 6 Then Exit Do
    If d > c Then Exit For
    Next
    Next
    e = i
    Loop Until a >= 10
    Close
    End
    End Sub

    輸出:
    6 8
    35 49
    204 288
    1189 1681
    6930 9800
    40391 57121

    回覆刪除
  2. 小冰好,
    先再稱讚一下大家,暑假靠毅力向前,是有前途的,加油。
    ***
    你中心的那個for-next是條件的方式,那用條件迴圈會比較好。
    基本上這題用程式來寫之外,也可以用數學的等差級數來驗算。(n*n-n=2*k*k)
    其中的k是住在第幾間,所以用個c來將1到k-1一直加起來是對的。
    那個d就是將c-(k+1)-(k+2)-...-(n),一直到等於0(這個k,n就是解答之一),還是小於0(換下個k)
    這樣子重複的運算就不會太多,就不會做不完了。(或者會做快些)
    ***
    a=0
    k=1
    c=1
    n=0
    do
    k=k+1
    c = c + (k-1) '這個你是做對的
    '**第2層條件迴圈
    d = c
    n = k
    do
    n = k+1
    d = d -n
    loop until d <=0
    if d=0 then
    a = a +1
    print #1,k,n
    end if
    loop until a >=10

    回覆刪除