2011年7月20日 星期三

總和檢查

總和檢查
 請檢查一個數列中,尋找任兩個數字相加後的和是否會等於輸入的檢查值。
 例如,有一個數列為8,20,27,17,13,28,35,31,若輸入的檢查值為48,會找到20及28兩個數,相加的和為48;反之若輸入的檢查值為50,則會找不到配對的數字。
 輸入說明:
 輸入之第一列為下一列數列中的個數,第二列為數列資料。每個數字與數字間的區隔為一個空白符號。第三列及以後的資料為輸入的檢查值,每一列有一個檢查值,當為0時表示結束。
 輸入範圍:
 輸入的數列最少有2個數字,最多不超過100個。每個數列中的數字皆大於0,小於1000,且不重覆。
 輸入範例:in.txt
8
8 20 27 17 13 28 35 31
48
50
59
0
 輸出說明:
 每個檢查值有一個輸出結果,若有匹配的檢查值,則輸出為1,反之為-1。
 輸出範例:out.txt
1
-1
1

4 則留言:

  1. 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
    Line Input #1, X
    Call Remove_Sub(X)
    Call Check_Sub
    Do While Not EOF(1)
    Input #1, Check
    If Check <> 0 Then
    p = False
    For i = 0 To (List2.ListCount - 1)
    If Check = List2.List(i) Then Print #2, 1: p = True: Exit For
    Next i
    If p = False Then Print #2, -1
    End If
    Loop
    Close #2
    Close #1
    End
    End Sub

    Sub Remove_Sub(A)
    B = Split(A)
    For i = 0 To UBound(B)
    List1.AddItem B(i)
    Next i
    End Sub

    Sub Check_Sub()
    For i = 0 To (List1.ListCount - 2)
    For j = i + 1 To (List1.ListCount - 1)
    List2.AddItem Val(List1.List(i)) + Val(List1.List(j))
    Next j
    Next i
    End Sub

    回覆刪除
  2. 佑好,
    程式正確。
    (雖然副程式名稱也怪怪的,如果更符合內容些,會更好些。不只容易看懂,也容易除錯,也容易將來再看得懂內容。)
    (當然,自己的英文能力總是要一直加強的,可以學緣尉在命名之前,用yahoo字典找看看中文翻成英文,再取前5個字或是幾個字)

    回覆刪除
  3. 熊掌好,

    英文真的是我的死穴:)
    我會學學的:D

    回覆刪除
  4. Dim ub As Integer, s, ss, a As Integer, ss0 As Boolean, ch As Boolean

    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, ub
    Line Input #1, n
    s = Split(n)
    ss = Split(n)

    Call Re

    Do While Not EOF(1)
    Input #1, a
    If a = 0 Then Exit Do
    Call Run(0, (a), 0)
    ch = False
    For i = 0 To List1.ListCount - 1
    If a = List1.List(i) Then ch = True
    Next
    If ch <> True Then Print #2, "-1"
    Loop


    Close
    Close

    End
    End Sub


    Function Run(ans, x, ti)

    If x = ans And ti = 2 Then
    List1.AddItem x
    Print #2, "1": x = -1: Exit Function
    Else

    For i = 0 To ub - 1
    If ss(i) <> 1 And ans < x Then ss(i) = 1: Call Run(ans + s(i), x, ti + 1) Else Call Re
    Next

    End If


    End Function


    Sub Re()
    For i = 0 To ub - 1
    ss(i) = 0
    Next
    End Sub


    寫得有點複雜
    我也是變數名稱選得不好

    回覆刪除