2010年7月16日 星期五

總和檢查

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

額外說明:
1.請每人在貼上來的程式裡,form_load()或form_activate()中的第一行要加上,
form.hide
最後一行要加上,
end
,也就是說,執行時,什麼都看不到,也會自動結束。
2.這幾個星期,原則以每星期2題,主要利用星期六日來做。
3.學科考試以總複習的第4章全部。所以,全部的題目都要做,輔導課結束,拿給我檢查,當然,如果有不懂的題目也可以問的。

熊掌

9 則留言:

  1. 老師 做完 是拿給你 還是直接貼這邊就好?

    回覆刪除
  2. 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, AA
    ReDim n(AA) As Integer
    Line Input #1, strA
    b = Split(strA, " ")
    For i = 1 To AA
    n(i) = Val(b(i - 1))
    Next i
    Do
    Input #1, Qu
    Qu = Val(Qu)
    If Qu = 0 Then Exit Do
    ans = -1
    For i = 1 To AA
    For j = i To AA
    sumA = n(i) + n(j)
    If sumA = Qu Then
    ans = 1
    GoTo isN
    End If
    Next j
    Next i
    isN:
    Print #2, ans
    Loop
    Close #2
    Close #1
    End
    End Sub

    回覆刪除
  3. Dim dat(100) As Integer
    Dim ans As Boolean
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\test2.txt" For Input As #1
    Open App.Path & "\result2.txt" For Output As #2
    Input #1, qq
    For i = 1 To qq
    Input #1, step
    dat(i) = step
    Next i
    Do
    Input #1, countdat
    If countdat = 0 Then Exit Sub
    ans = False
    For i = 1 To qq
    k = 1
    Do Until k = qq
    sumstep = dat(i) + dat(k)
    If countdat = sumstep Then
    ans = True
    Exit For
    End If
    k = k + 1
    Loop
    Next i
    If ans Then
    Print #2, 1
    Else
    Print #2, -1
    End If
    Loop
    Close #1
    Close #2
    End
    End Sub

    回覆刪除
  4. Dim ch(100) As Integer
    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
    For i = 1 To n
    Input #1, ch(i)
    Next i
    Do
    Input #1, x
    If x = 0 Then Exit Do
    ans = False
    For i = 1 To n
    For j = 1 To n
    If ch(i) + ch(j) = x And ch(i) <> ch(j) Then
    ans = True
    Exit For
    End If
    Next j
    Next i
    If ans Then
    Print #2, 1
    Else
    Print #2, -1
    End If
    Loop
    End
    Close #1
    Close #2
    End Sub

    回覆刪除
  5. 小白好,
    1.用ReDim n(aa) as integer,是正確的,但是,其實不用那麼麻煩,還是直接定義最大值就好了。
    dim n(100) as integer
    2.你用Qu = Val(Qu)來轉換,也可以用dim qu as integer,就是先定義變數,不要是string或是Variant就好了。(哦,還有日期、布林..)
    3.程式應該OK。

    阿揚好,
    1.還是在這兒交就行了,學科的,才需要當面交給我吧。輔導課結束哦。8/6左右。
    2.你用exit sub,那麼最後的close #1/close #2/end這3行會執行到嗎?(應該是不會哦)
    3.你的程式也OK。

    阿瑋好,
    1.你的程式也OK。
    2. if ch(i) + ch(j) = x and ch(i) <> ch(j) then 後面的條件改成i <> j比較好。雖然這題強調每個數字都不同,所以你的寫法也不會有錯。

    高仔呢?

    回覆刪除
  6. 我有跟 高仔 說喔=O=

    老師 你說學科!?

    是我們要自己印下來寫,在交給你嗎??

    回覆刪除
  7. 阿揚好,
    學科就寫在書上就好,輔導課完,再拿書給我看吧。

    回覆刪除
  8. Dim a(100) As Integer
    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, x
    For i = 1 To x
    Input #1, a(i)
    Next i

    Do While Not EOF(1)
    Input #1, b
    If b = 0 Then Exit Sub
    ans = -1
    For i = 1 To x - 1
    For j = 2 To x
    If a(i) + a(j) = b And i <> j Then ans = 1
    Next j
    Next i
    Print #2, ans
    Loop
    Close #2
    Close #1


    End
    End Sub

    回覆刪除
  9. 高仔好,
    這題寫的很清晰,很好。我喜歡,加油哦。

    回覆刪除