2012年7月21日 星期六

資料表示方式的應用


子題1(12%):在一張地圖上標示有若干個城市,及一些可雙向通行的道路。這些道路的頭、尾,各連接一個不同的城市。我們用1 個一維整數陣列(假設稱為a 陣列),存放各個城市連接的道路數目(存放順序不限)。為了判斷陣列中存放的道路數目值,是否可以正確的表達某一張地圖上城市及道路的關係,我們利用以下步驟檢查(假設陣列的指標由1 開始):
步驟1:我們將陣列由大到小排序,令排序後的陣列為b 陣列。
步驟2:假設b(1) = k,我們將b(2)到b(k +1)共k 個元素,每個元素值都減1。
步驟3:我們將b(1)從b 陣列中移除,得一個「新陣列」。
步驟4:如果「新陣列」中,存在任何一個小於0 的元素值,原始a 陣列就是「不正確」陣列;如果「新陣列」中的所有元素均等於0,原始a 陣列就是「正確」陣列。若在此步驟達成判斷,檢查即可結束。
步驟5:在不能判斷正確與否時,將「新陣列」代入步驟1,重覆上述檢查,直到達成判斷條件為止。
輸入說明:
第1~4 行表示將判斷之4 組陣列值,各元素間以逗號區隔,每組陣列最多有10 個元素。輸入檔之元素值,不會造成選手進行「步驟2」時產生「陣列索引值超出範圍」的錯誤。
輸出說明:
第1~4 行分別輸出第1~4 組陣列的正確與否。當正確輸出「正確」,不正確時輸出「不正確」。

輸入範例:【檔名:in-2-1.txt】
1,1,2,5,3,2
4,3,1,1,1
4,4,4,3,3
3,3,3,3,3

輸出範例:【檔名:out-2-1.txt】
正確
不正確
正確
不正確

1 則留言:

  1. Private Sub Form_Load()
    Me.Hide
    Dim d As Boolean
    Dim d1 As Boolean
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Do While Not EOF(1)
    Line Input #1, n
    a = Split(n, ",")
    c = UBound(a)

    For i = 0 To UBound(a)
    For j = 0 To (UBound(a) - 1)
    If a(j) < a(j + 1) Then
    b = a(j)
    a(j) = a(j + 1)
    a(j + 1) = b
    End If
    Next
    Next
    Do
    d = True
    n = a(0)
    For i = 1 To n
    a(i) = a(i) - 1
    Next
    For j = 1 To UBound(a)
    a(j - 1) = a(j)
    Next
    c = c - 1
    For i = 0 To c
    If a(i) < 0 Then d = False
    Next
    d1 = False
    e = 0
    For i = 0 To c
    If a(i) = 0 Then e = e + 1
    Print #2, a(i);
    Next
    If e = c + 1 And a(0) = 0 Then
    d1 = True
    Else
    d1 = False
    End If
    If c = 0 Then d = False
    Loop Until d1 = True Or d = False
    If d1 = True Then Print #2, "正確" Else Print #2, "不正確"
    Loop
    Close
    Close
    End
    End Sub

    回覆刪除