2010年11月8日 星期一

Problem 2:資料表示方式的應用(99模擬)

子題1(12%):在一張地圖上標示有若干個城市,及一些可雙向通行的道路。這些道路的頭、
尾,各連接一個不同的城市。我們用1 個一維整數陣列(假設稱為a 陣列),存放各個城市連
接的道路數目(存放順序不限)。為了判斷陣列中存放的道路數目值,是否可以正確的表達某
一張地圖上城市及道路的關係,我們利用以下步驟檢查(假設陣列的指標由1 開始):
步驟1:我們將陣列由大到小排序,令排序後的陣列為b 陣列。
步驟2:假設b(1) = k,我們將b(2)到b(k +1)共k 個元素,每個元素值都減1。
步驟3:我們將b(1)從b 陣列中移除,得一個「新陣列」。
第 3 頁,共 8 頁
步驟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】
正確
不正確
正確
不正確


子題2(12%):在圖形結構中,有一種特別的圖形,稱之為「樹狀圖」(Tree)。在一個樹狀
圖中,包含若干個「節點」,每個節點和它的「上一層節點」及「下一層節點」相連。每個節
點有「1 個」或是「沒有」上一層節點;也可能有「1 個」、「多個」或是「沒有」下一層節點。
這些節點中,只有1 個節點沒有上一層節點,所以它是最頂層的節點,我們稱之為「樹根」;
其他「非樹根」的節點,都有1 個上一層節點,我們稱這些「上一層節點」是該節點的「父
親」。現在給定一個樹狀圖資料,並給一個「目的地」節點名稱,請選手輸出從「樹根」連接
到目的地經過的所有節點。輸出資料的順序,應從「樹根」開始,一層一層向下,最後到達
「目的地」節點依序輸出,輸出的節點不能重覆。
輸入說明:第1 行表示共有多少個節點;第2 行是目的地節點;第3 行起是所有節點資料,
每行有一組符號以逗號隔開,第1 個符號為「節點名稱」,第2 個符號為其「父親名稱」。若
是「樹根」節點,其父親表示為「---」3 個連續減號。

輸出說明:列出從「樹根」連接到目的地經過的所有節點(包括樹根與目的地節點),而輸出
的節點間至少以1 個空白相隔開。
輸入範例:【檔名:in-2-2.txt】
11
K
A, ---
B, A
C, A
D, B
E, B
F, C
G, E
H, G
I, G
J, I
K, I
輸出範例:【檔名:out-2-2.txt】
A B E G I K

2 則留言:

  1. 2-2


    Private Sub Form_Load()
    Me.Hide
    Dim ans As String
    Dim n(999, 1)
    Open App.Path & "\in-2-2.txt" For Input As #1
    Open App.Path & "\out-2-2.txt" For Input As #2
    Input #1, x
    Input #1, op
    For i = 1 To x
    Line Input #1, step
    k = Split(step, ",")
    For j = 0 To UBound(k)
    k(j) = Trim(k(j))
    Next j
    If k(1) = "---" Then
    star = k(0)
    End If
    n(i, 0) = k(0): n(i, 1) = k(1)
    Next i
    Do Until op = star
    For i = 1 To x
    If n(i, 0) = op Then
    ans = " " & op & ans
    op = n(i, 1)
    End If
    Next i
    Loop
    ans = star & ans
    Print #2, ans
    Close #2
    Close #1
    End
    End Sub

    by Yung

    回覆刪除
  2. Dim ans As String
    Dim q As Boolean
    2-1
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in-2-1.txt" For Input As #1
    Open App.Path & "\out-2-1.txt" For Input As #2
    Do Until EOF(1)
    Line Input #1, step
    Do
    ans = ""
    k = Split(step, ",")
    q = True
    For i = 0 To UBound(k)
    k(i) = Trim(k(i))
    If Val(k(i)) <> 0 Then q = False
    Next i
    For i = 0 To UBound(k) - 1
    For j = i To UBound(k)
    If k(i) < k(i) Then b = k(i): k(i) = k(j): k(j) = b
    Next j
    Next i
    If q = True Then
    Print #2, "正確": Exit Do
    End If
    If UBound(k) = 0 Then
    If k(0) = 0 Then Print #2, "正確" Else Print #2, "不正確"
    End If
    For j = 1 To UBound(k)
    If j <= Val(k(0)) Then
    k(j) = k(j) - 1
    If k(j) < 0 Then
    Print #2, "不正確"
    Exit Do
    End If
    ans = ans & k(j) & ","
    Else
    ans = ans & k(j) & ","
    End If
    Next j
    If Len(ans) - 1 > 0 Then
    step = Left(ans, Len(ans) - 1)
    Else
    Exit Do
    End If
    Loop
    Loop
    End
    Close #2
    Close #1
    End Sub
    by Yung

    回覆刪除