請設計一個程式,能在一個數列中,找出此數列第K大數字的位置。例如,有一個數列為8,20,27,17,13,28,35,31,第三大的數字為28,此數字的位置在串列中的第6個位置;第5大的數字為20,此數字的位置在串列中的第2個位置。
輸入說明:輸入之第一列為下一列數列中的個數。第二列為數列資料。每個數字與數字間的區隔為一個空白符號。第三列及以後的資料為要尋找第K大數字的K值,當為0時表示結束。(請參照輸入範例)
輸入範圍:輸入的數列最少為2個,最多不超過100個。每個數列中的數字皆大於0,小於1000,且不重覆。
輸入範例:in.txt
8
8 20 27 17 13 28 35 31
3
5
10
0
輸出說明:輸入的每個K值皆有一個位置的輸出結果,若超過數列的個數則輸出-1。(請參照輸出範例)
輸出範例:out.txt
6
2
-1
Private Sub Form_Load()
回覆刪除Dim a(100) As Integer
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, x
a(i) = x
List1.AddItem x - 1000
Next
Do
Input #1, c
If c = 0 Then Exit Do
For i = 1 To n
If c > n Then Print #2, -1: Exit For
If a(i) = List1.List(c - 1) + 1000 Then Print #2, i
Next
Loop Until c = 0
Close
Close
End
End Sub
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Dim a(100) As Integer
Input #1, n
For i = 1 To n
Input #1, x
a(i) = x
List1.AddItem x - 1000
Next i
Do
Input #1, c
If c = 0 Then Exit Do
For i = 1 To n
If c > n Then Print #2, -1: Exit For
If a(i) = List1.List(c - 1) + 1000 Then Print #2, i
Next i
Loop Until c = 0
Close #2
Close #1
End
End Sub
作者已經移除這則留言。
回覆刪除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 Val(n)
Input #1, b
List1.AddItem b + 1000
List2.AddItem b + 1000
Next i
Do While Not EOF(1)
Input #1, q
If Val(q) = 0 Then Exit Do
If Val(q) > Val(n) Then
Print #2, -1
Else
For i = 0 To Val(n)
If List1.List(Val(n) - Val(q)) = List2.List(i) Then z = i + 1
Next i
Print #2, z
End If
Loop
Close #2
Close #1
End
End Sub
' List1的Sorted為True
' List2的Sorted為False