2011年11月8日 星期二

99正式 Problem 1-2:

本試題輸入檔為一篇中文文章,文章內容可能包括「中文」及若干「全型符號」。文章中可能使用的「全型符號」包括「,」、「。」、「;」、「、」、「!」及「?」6種。在中文中有若干文字,如「臺」與「台」,在某些時候意義相同,但在本題中,只要是字碼不同,選手都應視為「不同字」處理。請由程式讀入給定的中文文章,並作以下的統計:



子題 2. 8%)【使用路徑:c:\Problem1\子題 2\】【程式名稱p12】請選手在讀入的文章中,統計「出現次數最多」且「包含 2個中文字」的「詞」。在文章中,假設所有「兩兩相鄰的中文字」均可視為一個「詞」。本題所要統計的「詞」,只包括 2個中文字,其中不包含任何「全型符號」;我們也假設,一個「詞」不一定只出現在同一行中,也可能被切斷分隔在文章的前、後 2行。例如,有一篇文章內容為:
我們是學生。今天要上學。
在此文章中,所有包括 2個字的「詞」有:「我們」、「們是」、「是學」、「學生」、「生。」、「。今」、「今天」、「天要」、「要上」、「上學」及「學。」共 11組。雖然有些「詞」並不具明顯意義,如:「們是」、「是學」、「天要」及「要上」,但本題仍將其視為一種「詞」,並加入統計。但是「生。」、「。今」及「學。」等 3者,因為其中包括「全型符號」,則不算是「詞」,不列入統計。請選手統計並輸出出現次數最多、只包括 2個中文字的「詞」。輸入說明:第 1行表示文章的行數,第 2行開始為文章的內容。文章不超過 20行,每行不超過 50個中文字(含符號),而文章總字數不超過 1000字。
輸出說明:若統計結果只有「 1個」最多出現次數者,則以 1行輸出「出現次數最多的『詞』」及其「出現次數」。但若有「多個」最多出現次數者,則以多行輸出。每一行輸出 1個「詞」及其「出現次數」,輸出資料間以至少 1個空白隔開。
輸入檔案 1:【檔名:in1.txt
8


為達成永續發展的目標,行政院規劃六年國家重點發展計畫,由教育部規劃的永續
校園推廣計畫,為建立一個進步、安全、衛生、健康、人性化的學習環境空間為,
並於擴大內需刺激景氣的期程內,加速推行校園公共工程改造計畫,藉由突破傳統
校園封閉的環境與制式管理原則下,整合社區共同意識、建立社區風貌、拓展生態
旅遊等課題,改造校園環境成為具有社區特質的公共活動空間,結合校園綠色技術
實施應用,轉化國內相關產業技術,進而增進綠色產業推廣效益,落實擴大內需進
而促進產業升級與提振國內景氣之功效,從而發揮永續台灣、環境教育之積極意義
與促成教育改革之目的。
輸入檔案 2:【檔名:in2.txt
8

台灣地區資源短缺,興建大型水庫使用現階段推行不易,替代水源的之開發與再利用
已成為未來資源開發的之重要途徑,推動節約用水,推廣再利用的中水系統,
使全國平均之人均用水量逐步降至每日使用二百五十公升以下。落實國家水資源永
續經營之理念,水利署推動雨水利用及生活雜排水回收再使用增加替代水源使用,
並委託台灣雨水利用協會針對學界及各級學校相關人員,依各縣市所在之地理位置劃分
北中南三區各辦理一場次雨水貯集使用及生活雜排水再利用講習演討會議,將邀請國內相關
領域有豐碩成果與使用經驗之專家學者擔任主講員,對國內教育單位相關人員,以水資源
永續利用、雨水貯集利用、生活雜排水再使用及節約用水等議題進行講習與研討。
輸出檔案:【檔名:out.txt
校園 5

利用 7
使用

2 則留言:

  1. 用第一題程式改一下就OK :)

    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in1.txt" For Input As #1
    Open App.Path & "\in2.txt" For Input As #2
    Open App.Path & "\out.txt" For Output As #3
    Input #1, N
    For ii = 1 To N
    Line Input #1, X

    For i = 1 To Len(X) - 1
    A = Mid(X, i, 1)
    B = Mid(X, i + 1, 1)
    If A <> "," And A <> "。" And A <> ";" And A <> "、" And A <> "!" And A <> "?" And B <> "," And B <> "。" And B <> ";" And B <> "、" And B <> "!" And B <> "?" Then
    Call MyInstr(A & B)
    End If
    Next i
    Next ii

    Call ABC
    For i = 0 To List3.ListCount - 1
    Print #3, List3.List(i)
    Next i

    Print #3,
    Input #2, N
    List1.Clear: List2.Clear: List3.Clear

    For ii = 1 To N
    Line Input #2, X

    For i = 1 To Len(X) - 1
    A = Mid(X, i, 1)
    B = Mid(X, i + 1, 1)
    If A <> "," And A <> "。" And A <> ";" And A <> "、" And A <> "!" And A <> "?" And B <> "," And B <> "。" And B <> ";" And B <> "、" And B <> "!" And B <> "?" Then
    Call MyInstr(A & B)
    End If
    Next i
    Next ii

    Call ABC
    For i = 0 To List3.ListCount - 1
    Print #3, List3.List(i)
    Next i

    Close #3
    Close #2
    Close #1
    End
    End Sub

    Sub MyInstr(A)
    P = False
    For i = 0 To List1.ListCount - 1
    If A = List1.List(i) Then List2.List(i) = Val(List2.List(i)) + 1: P = True: Exit For
    Next i
    If P = fasle Then List1.AddItem A: List2.AddItem 1
    End Sub

    Sub ABC()
    Max = Val(List2.List(0))
    For i = 1 To List2.ListCount - 1
    A = Val(List2.List(i))
    If A > Max Then Max = A
    Next i

    For i = 0 To List2.ListCount - 1
    A = Val(List2.List(i))
    If A = Max Then List3.AddItem List1.List(i) & " " & List2.List(i)
    Next i
    End Sub

    回覆刪除
  2. Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in1.txt" For Input As #1
    Open App.Path & "\in2.txt" For Input As #2
    Open App.Path & "\out.txt" For Output As #3
    Input #1, t
    For i = 1 To t
    Line Input #1, n
    Call A1(n)
    Next
    Call A2
    Call A3

    List1.Clear
    List2.Clear
    Print #3, " "

    Input #2, t
    For i = 1 To t
    Line Input #2, n
    Call A1(n)
    Next
    Call A2
    Call A3

    Close
    Close
    Close
    End
    End Sub

    Sub A1(a)
    kk = "「,」、「。」、「;」、「、」、「!」「?」"
    For j = 1 To Len(a)
    m = Mid(a, j, 2)
    If InStr(kk, m) = 0 Then
    ch = 1
    For i = 0 To List1.ListCount - 1
    If m = List1.List(i) Then List2.List(i) = A4(List2.List(i) + 1): ch = 0
    Next
    If ch = 1 Then List1.AddItem m: List2.AddItem A4(1)
    End If
    Next

    End Sub

    Sub A2()

    For i = 0 To List1.ListCount - 1
    For j = 0 To List1.ListCount - 2
    If List2.List(j) > List2.List(j + 1) Then
    tmp = List2.List(j)
    List2.List(j) = List2.List(j + 1)
    List2.List(j + 1) = tmp
    tmp = List1.List(j)
    List1.List(j) = List1.List(j + 1)
    List1.List(j + 1) = tmp
    End If
    Next
    Next

    End Sub

    Sub A3()
    Q = List2.ListCount - 1
    For i = List1.ListCount - 2 To 0 Step -1
    k = List2.List(List2.ListCount - 1)
    If List2.List(i) = k Then Q = Q - 1
    Next

    For i = List2.ListCount - 1 To Q Step -1
    Print #3, List1.List(i) & " " & Val(List2.List(i))
    Next
    End Sub

    Function A4(a)
    Do While Len(a) < 3
    a = "0" & a
    Loop
    A4 = a
    End Function

    回覆刪除