2011年10月18日 星期二

96正式 Problem 5 (尋找第K大的位置

Problem 5 (尋找第K大的位置 12%)

請設計一個程式,能在一個數列中,找出此數列第K大數字的位置。例如,有一個數列為8,20,27,17,13,28,35,31,第三大的數字為28,此數字的位置在串列中的第6個位置;第5大的數字為20,此數字的位置在串列中的第2個位置。
輸入說明:輸入之第一列為下一列數列中的個數。第二列為數列資料。每個數字與數字間的區隔為一個空白符號。第三列及以後的資料為要尋找第K大數字的K值,當為0時表示結束。(請參照輸入範例)
輸入範圍:輸入的數列最少為2個,最多不超過100個。每個數列中的數字皆大於0,小於1000,且不重覆。
輸入範例:test5.txt
8
8 20 27 17 13 28 35 31
3
5
10
0
輸出說明:輸入的每個K值皆有一個位置的輸出結果,若超過數列的個數則輸出-1。(請參照輸出範例)
輸出範例:result5.txt
6
2
-1

2 則留言:

  1. Dim s, ss
    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, t
    Line Input #1, m
    s = Split(m)
    ss = Split(m)
    Call A1
    Do While Not EOF(1)
    Input #1, n
    If n <> 0 Then
    If n > t Then
    Print #2, "-1"
    Else
    Call A2(n)
    End If
    End If
    Loop

    Close
    Close
    End
    End Sub
    Sub A2(a)
    k = ss(a - 1)
    For i = 0 To UBound(s)
    If s(i) = k Then Print #2, i + 1
    Next
    End Sub


    Sub A1()

    For j = 0 To UBound(ss)
    For i = 0 To UBound(ss) - 1
    If Val(ss(i)) < Val(ss(i + 1)) Then
    tmp = ss(i)
    ss(i) = ss(i + 1)
    ss(i + 1) = tmp
    End If
    Next
    Next

    End Sub

    回覆刪除
  2. Dim X()
    Dim Y()
    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
    ReDim X(n)
    ReDim Y(n)
    For i = 1 To n
    Input #1, X(i)
    Y(i) = X(i)
    Next i

    For i = 1 To n - 1
    For j = i + 1 To n
    If Y(i) < Y(j) Then
    T = Y(i)
    Y(i) = Y(j)
    Y(j) = T
    End If
    Next j
    Next i

    Do While Not EOF(1)
    Input #1, A
    If A = 0 Then Exit Do
    If A <= n Then
    For i = 1 To n
    If Y(A) = X(i) Then Print #2, i
    Next i
    Else
    Print #2, -1
    End If
    Loop

    Close #2
    Close #1
    End
    End Sub

    回覆刪除