總和檢查
請檢查一個數列中,尋找任兩個數字相加後的和是否會等於輸入的檢查值。
例如,有一個數列為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
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
佑好,
回覆刪除程式正確。
(雖然副程式名稱也怪怪的,如果更符合內容些,會更好些。不只容易看懂,也容易除錯,也容易將來再看得懂內容。)
(當然,自己的英文能力總是要一直加強的,可以學緣尉在命名之前,用yahoo字典找看看中文翻成英文,再取前5個字或是幾個字)
熊掌好,
回覆刪除英文真的是我的死穴:)
我會學學的:D
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
寫得有點複雜
我也是變數名稱選得不好