跳到主要內容

105商業類技藝競賽試題Problem1

Problem 1:字串問題
子題 1:計算字數。 (程式執行限制時間: 2 秒) 9 分
做網路廣告的時候,有些廣告的文案都有規定字數不能超過多少,如果想要知道每列測試資
料(每組測試資料)有多少英文字,字和字之間用一個或多個空白隔開。”, ;! .” 這四個符號
會與英文字相鄰。寫一程式計算每列字數。

解法:

Dim Sep() As String = {" ", ",", "!", ".", ";"}

SR.ReadLine().Split(Sep, StringSplitOptions.RemoveEmptyEntries)



以空格為切割點,計算共有幾個字,並且刪除標點符號。


子題 2:摩斯電碼。(程式執行限制時間: 2 秒) 11 分
摩斯電碼是一種在電報通訊的時代傳送文字訊息的方式,透過不同的排列順序來表達不同的
英文字母、數字和標點符號。是由美國人薩繆爾·摩斯在1836 年發明。有兩種「符號」用來
表示字元:點(.)(ASC 碼0X2E)和劃(-)(ASC 碼0X2D),或叫「滴」(Dit)和「答」(Dah)。
數字對應的摩斯電碼如下:
0 ----- (Dah-Dah-Dah-Dah-Dah)
1 .---- (Dit-Dah-Dah-Dah-Dah)
2 ..--- (Dit-Dit-Dah-Dah-Dah)
3 ...-- (Dit-Dit-Dit-Dah-Dah)
4 ....- (Dit-Dit-Dit-Dit-Dah)
5 ..... (Dit-Dit-Dit-Dit-Dit)
6 -.... (Dah-Dit-Dit-Dit-Dit)
7 --... (Dah-Dah-Dit-Dit-Dit)
8 ---.. (Dah-Dah-Dah-Dit-Dit)
9 ----. (Dah-Dah-Dah-Dah-Dit)

解法:

'使用StartsWith(String s) 回傳true/false 注意大小寫 延伸:EndsWith(String s) 

'使用Substring (startIndex As Integer,    length As Integer) As String

For i = 0 To 1 'in1 & in2

 SR = Reader(i)

 Dim n As Integer = Val(SR.ReadLine())

 For j = 1 To n 'input 幾行

   Dim temp As String = SR.ReadLine()

   Do Until temp = "" '直到字串沒有摩斯密碼

     For k = 0 To 9 '判斷密碼

       If temp.StartsWith(code(k)) = True Then

          temp = temp.Substring(code(k).Length).Trim()

          SW.Write(k)

       End If

     Next

   Loop

   SW.WriteLine()

 Next

 If SR.ReadLine() = 0 Then

   SW.WriteLine()

 End If

 SR.Close()

Next


留言

這個網誌中的熱門文章

[EXCEL]以VBA與巨集自動化修改日期格式

在工作上可能會遇上的問題,在此紀錄與分享一下。 問題:Excel中輸入日期,有些人輸入108/7/8、108.3.5等等格式要怎麼統一成 1080506這樣的 格式呢? 步驟一:先以內建函數轉換(取代)日期 要認識的基本函數 IF、Mid、Left、Right、Substitute 進行取代 IF( MID(RIGHT(A1,2),1,1)="/" , IF(RIGHT(LEFT(A1,6),1)="/" ,SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","0",1),SUBSTITUTE(SUBSTITUTE(A1,"/","0",2),"/","",1)),IF( RIGHT(LEFT(A1,6),1)="/" , SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","0",1) ,SUBSTITUTE(SUBSTITUTE(A1,"/","",2),"/","",1))) 第一個IF是用來判斷"日"的格式,舉例來說108/5/6,Right(A1,2)會取出"/6",再用Mid設定取第1個字"/",108/5/16,Right(A1,2)會取出"16",再用Mid設定取第1個字"1", 這也代表如果是1-9日可以讓她進行補0的動作。 第二個IF是用來判斷"月"的格式,與上面用取法類似。 步驟二:建立自訂函數 改為VBA格式,建立一個自己設定的函數SubstituteDate() Function SubstituteSlash(A1)     If InStr(A1, "/") > 0 Then           ...