發表文章

目前顯示的是 2021的文章

10. Problem J: Summing Digits (CPE10473, UVA11332) - CPE一顆星解答與說明

圖片
    👉   CPE 一顆星選集列表(49題) 題目說明與解答 題目 將讀入的數字N,將其中每個字元相加,直到剩個位數(小於 10) 為止 輸入說明 每一行包含一個正整數 N  當數值為 0 時,結束處理 輸出說明 根據每個正整數N,輸出計算的結果 解題技巧 使用字串,取得每個字元 解題過程 取得輸入 因為測試資料的筆數是動態非固定值,所以使用 while 迴圈與 scanner.hasNextLine() 來偵測是否有整行的輸入 使用 scanner.nextLine() 取得資料 偵測是否結束計算 若為字串" 0 "則使用 break 結束此 while 迴圈 字串比對,String 是參考資料型別 比對字串的文字是否相同,請使用 equals() 方法 請不要使用 == 進行字串比對,== 是比對變數在記憶體上的位置 取得每個字元 使用 while 迴圈判斷公式計算結果是否為個位數,因為採用字串解題,個位數可解讀成字串長度為 1 當字串長度大於 1 時, 則須執行 while 迴圈的公式 使用 for 迴圈與 String 的 charAt() 方法來取得每一個字元 加總每個數字 將字元轉成數字,有兩種方法,擇一使用 Character.getNumericValue('1') 將字元轉成字串 String.valueOf(),再將字串轉成整數 Integer.parseInt() Integer.parseInt(String.valueOf('1‘)) 將透過 for 迴圈逐一加總每個數字的結果轉成字串     👉   CPE 一顆星選集列表(49題) 題目說明與解答

9. Decode the Mad man (CPE10425, UVA10222) - CPE一顆星解答與說明

圖片
    👉   CPE 一顆星選集列表(49題) 題目說明與解答 題目 寫程式來解碼(decode)瘋狂老教授的語言 輸入說明 有一筆測試資料,是編碼(encoded)過後的訊息 其中包含一個或多個單字 輸出說明 將解碼後的文字輸出 在標準鍵盤(standard keyboard)上,找到該測試資料的字母(letter)或標點符號(punctuation symbol),並取代成鍵盤上左邊第二個的字母 解題技巧 注意鍵盤上的英文與符號的按鍵位置與順序,尤其是最左邊往前推會讀取上一排的最後面 觀察「 ` 1」 符號左移後的變化,題目並沒有講 透過瘋狂程設的自訂測資 觀察 「 ` 1」符號解碼的結果,發現每次「 ` 」解碼結果都太一樣 官方的程式碼,沒有處理「位置 減 2 小於 0 的問題」 解題過程 取得者輸入 使用 while 迴圈與 scanner.hasNextLine(),偵測使用者是否有輸入資料 當使用者輸入資料時 使用 scanner.nextLine() 取得整行句子 使用 String 類別本身提供的 toLowerCase() 方法,將句子轉成小寫 建立鍵盤字串 將鍵盤文字拉平,建立標準鍵盤的所有文字,從左上的「 ` 」符號開始,由左而右,由上而下,一直打到 「 / 」符號結束 遇到反斜線 「 \」 ,要打成 「 \\」 跳脫字元 Escape Sequence 使用字串時,有一些特殊字元無法表示,需使用「\」,來表達特殊字元 分析 text 句子中的字元 使用 for 迴圈,產生從第一個 ~ 最後一個字元的位置 使用 String 類別提供的 charAt() 方法來取得句子中的每一個字元 檢查字元是否存在標準鍵盤中 先找出句子中的字元,位於標準鍵盤字串中的哪個位置,使用 String 類別提供的 indexOf() 方法,會指出該字元的開始位置。如果沒有找到則返回 -1  有找到字元在標準鍵盤字串中的位置:使用 charAt() 方法,讀取「字元位置 - 2 」的字元 沒有找到字元在標準鍵盤字串中的位置:直接將字元印出,例如空白     👉   CPE 一顆星選集列表(49題) 題目說明與解答

8. What's Cryptanalysis? (CPE10402, UVA10008) - CPE一顆星解答與說明

圖片
    👉   CPE 一顆星選集列表(49題) 題目說明與解答 題目 對密文做分析 輸入說明 第一行為數字 N,表示接下來會輸入 N 行句子 每一行會包含 0 個或多個字元,包括空白 輸出說明 每一行輸出包含: 一個大寫(uppercase)的字母 + 空白 + 出現次數 出現次數 大寫字母與小寫字母視為相同(不區分大小寫) 不用計算其他字元(像是空白.,等)出現的次數 依照出現的次數,由大至小(descending)印出 若次數相同,則以字母表(alphabet)的順序輸出 沒有出現過的字母,不用輸出 解題技巧 統計 26 個字母(a-z)出現的次數,由大至小輸出 將字串統一轉大寫 讀取字串中的字元 判斷字元是否為字母 解題過程 取得輸入 取得輸入筆數 Scanner scanner = new Scanner(System.in); 使用scanner.nextInt() 使用 scanner.nextInt() 取得數字 3 ,後面的換行↲ 會留著等待讀取 要多寫一次scanner.nextLine() ,才能把後面的換行↲ 處理掉 取得句子 根據筆數,使用 for 迴圈與 scanner.nextLine() 逐一讀取句子 將字串統一轉大寫 String text = "Wow!!!! Is this question easy?"; text = text. toUpperCase() ; // WOW!!!! IS THIS QUESTION EASY?"; 讀取字串中的字元 char letter = text.charAt(0) // 'W'  判斷字元是否為字母 統計時,須排除句子中的空白與 . 等符號 判斷方法有兩種,擇一使用 使用 Character 外包類別判斷 char letter = 'W'; Character.isLetter(letter)  使用 ASCII Code https://zh.wikipedia.org/wiki/ASCII A - Z 對應 65 - 90 letter >= 65 && letter <= 90 letter >= 'A' && letter <= ...

7.List of Conquests (CPE21924, UVA10420) - CPE一顆星解答與說明

圖片
    👉   CPE 一顆星選集列表(49題) 題目說明與解答 題目 幫忙統計數量 輸入說明 輸入資料最多會有 2000 行 第一行的數字 n 是宣告接下來有幾筆資料 每一行包含 國家名詞 和 姓名 假設 國家名詞 都只有一個單字 輸出說明 按照字母排序將 國家名稱 與 人數 印出 國家名稱 與 人數 中間要以 空白 隔開 解題技巧 注意讀取資料的方式,使用next()與 nextLine()的時機 根據資料筆數,使用 for 迴圈讀取資料 使用 Map 儲存國家名稱與人數 跟第 8 題 What's Cryptanalysis? (CPE10402, UVA10008),統計英文字母出現幾次,用 map 解的邏輯類似 解題過程 取得輸入 取得資料筆數,使用 nextInt() ,不包含空白與換行 根據資料筆數,使用 for 迴圈讀取資料 讀取 國家 next() ,不包含空白與換行 讀取 姓名 nextLine() 儲存輸出資料 Map< Key , Value > = < 國家名稱 , 人數 > 一個鍵值Key對應一個元素Value,鍵值不重複 宣告 TreeMap 型別的變數,用來儲存 國家名稱 與 人數  TreeMap 會 自動根據 Key 排序 ,符合題目按照英文排序 國家名稱 的需求 宣告方法 TreeMap <類別, 類別> = new TreeMap <類別, 類別>(); 此處的類別不能放基本資料型別,要放參考資料類別 TreeMap < String , Integer > = new TreeMap < String ,  Integer >(); 認識Map 的方法 增加 Key 與 Value  put(K key, V value) 判斷 containsKey(Object key):此 key 是否存在 map 中 containsVaule(Object value) :此 value 是否存在 map 中  取得 map 中所有的 key keySet() :具有唯一性的 key 集合  取得某 Key 的值(Value) get(Object key) 統計國家...