2010年12月20日 星期一

門牌號碼

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

輸出範例:
6 8
35 49

出自 程式設計隊訓練教材 NO.34 門牌號碼

參照 http://chscvb.blogspot.com/2010/01/20100125.html

4 則留言:

  1. Private Sub Form_Load()

    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    For i = 1 To 60000
    a = a + (i - 1)
    b = 0
    For j = (i + 1) To 60000
    b = b + j
    If b > a Then Exit For
    If b = a Then Print #2, i, j
    Next
    Next
    Close #2
    Close #1

    End Sub


    算到 60000 整能求到 6 個
    有算到 50 萬過,但是也還不到10個
    算 100 萬時當機了 - -

    回覆刪除
  2. If b = a Then Print #2, i, j

    這一行忘了在後面補 :exit for

    回覆刪除
  3. arro好,
    果然又是消失了啊。
    算了,再打一次吧。
    1.將你的程式的輸出也po上來吧,這樣我比較容易知道正確與否。(我手邊常常是沒有vb的)
    2.土法煉鋼速度太慢的話,再來就要改進程式的部分。
    你的a是每次加上1個最後的數而已,這很好。但是,你的b並沒有用類似的方式。
    你的b應該可以每次先減掉前頭的數,然後依次加後頭的數,這樣會快很多吧。
    試試吧。(我也試試看這個po會不會再消失)

    回覆刪除
  4. 囧~

    那我又要重新RUN一次程式了

    只好再改良囉

    不過應該會求到很後面的數吧

    回覆刪除