2010年11月8日 星期一

Problem 5(8%):傳統數學問題的解決(99模擬)

子題1:給定若干個數字,將它們依序排成一個頭、尾相接的環形。如果我們從某一數字開
始點名,每次點名後再往後跳2 個數字繼續點名(中間間隔1 個未被點名的數字)。已經被點
到名的數字不可再點,直到剩下最後一個「未點名」的數字時才停止。請問最後的數字為何?
輸入說明:
第1 行依序給定最多20 個要點名的數字,各數字之間以逗號隔開。
第2 行有1 個數字,是「開始點名」的數字。
輸出說明:
第1 行輸出最後一個未點名的數字。
輸入範例:【檔名:in-5-1.txt】
5, 3, 7, 11, 4, 2, 1, 8, 9
8
輸出範例:【檔名:out-5-1.txt】
9
子題2(8%):如果有一個正整數n,其值等於所有n 的因數(除了n 以外)之總合,則n 稱
為「完美數」(Perfect number)。在此計算中,其「因數」不限制為「質因數」。請輸出2 到數
字k 之間的完美數。
輸入說明:
第1 行有1 個數字,代表k 的值。而k 的值不超過50000。
輸出說明:
每行輸出1 個範圍內的完美數,依其值由小到大輸出。
輸入範例:【檔名:in-5-2.txt】
10000
輸出範例:【檔名:out-5-2.txt】
6
28
496
8128

2 則留言:

  1. 5-1
    Public Sub Form_Load()
    Me.Hide
    Open App.Path & "\in-5-1.txt" For Input As #1
    Open App.Path & "\out-5-1.txt" For Input As #2
    Line Input #1, step
    Input #1, start
    x = Split(step, ",")
    For i = 0 To UBound(x)
    x(i) = Trim(x(i))
    If Val(x(i)) = start Then n = i
    Next i
    k = 0
    Do Until k = UBound(x)
    x(n) = 0: k = k + 1
    For kk = 1 To 2
    If x((n + 1) Mod (UBound(x) + 1)) = 0 Then
    kk = kk - 1
    End If
    n = (n + 1) Mod (UBound(x) + 1)
    Next kk

    Loop
    For i = 0 To UBound(x)
    If x(i) <> 0 Then Print #2, x(i)
    Next i
    Close #2
    Close #1
    End
    End Sub

    by Yung

    回覆刪除
  2. 5-2
    Public Sub Form_Load()
    Me.Hide
    Open App.Path & "\in-5-2.txt" For Input As #1
    Open App.Path & "\out-5-2.txt" For Input As #2
    Input #1, x
    For i = 2 To x
    ans = 0
    For j = 1 To i - 1
    If i Mod j = 0 Then ans = ans + j
    Next j
    If ans = i Then Print #2, ans
    Next i

    Close #2
    Close #1
    End
    End Sub
    BY Yung

    回覆刪除