[C++] NCYU 回家功課16

請不要直接抄寫程式碼! 也請不要直接跳到程式碼部分,除非你已經寫好了,想要參考別人的寫法! 回家功課16 以 ^Z 結束輸出 (測資可能有很多行),不是 ^Z 的話就把輸入進來的字串 temp 加進 sentence 裡 最後要處理的字串為 sentence , temp 只是暫時拿來輸入的變數 (temporary) 宣告長度為 26 的陣列,並初始化為 0 (因為不分大小寫的字母有 26 個) 第 0 個代表 A 或 a 、第 1 個代表 B 或 b . . . 以此類推 用 for 迴圈遍歷 sentence 的每一個字元,分成大寫、小寫和其他 用 ASCII 判斷,如果是大寫就 alphabet[sentence[i]-'A']++; 舉例:當 sentence[10] 為 F (ACSII:70) 剪掉 A (ASCII:65) 會等於 5 ,則 alphabet[5] 會 +1 小寫以此類推 其他符號或空格則不考慮,跳過 (continue) 判斷最大值與記錄位置,就把 alphabet 這陣列遍歷過就行了 程式碼大概如下:...

November 27, 2020 · 1 min · CPP

[C++] 進制轉換 Part 2

這次是把 etutor 的作業做延伸, 並且用 STL 中的 map 實作! 上一次是用 vector 來實作 延伸閱讀:C++ 進制轉換 map map 的概念就是 映射 由數個數對構成 數對是以 key : value 的形式存在 任一 key 可對到其 value 同一個 key 不會有不同 value ,像是 函數 定義 ※ 因為程式碼有高度重複性,所以就貼一部分而已 程式碼大概如下: 使用 map 建表 map<string, string> dicHex = { {"0", "0000"}, {"1", "0001"}, {"2", "0010"}, {"3", "0011"}, {"4", "0100"}, {"5", "0101"}, {"6", "0110"}, {"7", "0111"}, {"8", "1000"}, {"9", "1001"}, {"a", "1010"}, {"b", "1011"}, {"c", "1100"}, {"d", "1101"}, {"e", "1110"}, {"f", "1111"}, {"A", "1010"}, {"B", "1011"}, {"C", "1100"}, {"D", "1101"}, {"E", "1110"}, {"F", "1111"}, {"0000", "0"}, {"0001", "1"}, {"0010", "2"}, {"0011", "3"}, {"0100", "4"}, {"0101", "5"}, {"0110", "6"}, {"0111", "7"}, {"1000", "8"}, {"1001", "9"}, {"1010", "a"}, {"1011", "b"}, {"1100", "c"}, {"1101", "d"}, {"1110", "e"}, {"1111", "f"} }; 確認數字是否為有效的 (有 checkBin 、 checkOct 、 checkHex) bool checkBin(string number) { int length = number....

November 18, 2020 · 4 min · CPP

[C++] 期中考第三題

期中考第三題:兌換瓶子 每 7 個喝完的瓶子,可以再兌換一瓶 drink 代表還沒喝的,bottle 代表喝完的瓶子 先把一開始的飲料都喝完 int bottle = drink; 如果一開始的飲料大於等於 7 瓶,就繼續兌換(while 迴圈) 每兌換一次就喝掉 1 瓶,兌換 n 次就喝掉 n 瓶 把上一次喝掉的瓶子跟不足兌換的瓶子收集起來,再拿去兌換 最後不夠兌換(瓶子< 7),就結束了(跳出 while 迴圈) 這時候的 bottle 就會是全部喝完的瓶子 TCGS Judge 類似題目:TCGS a041:收集冰棒棍 #include <iostream> using namespace std; int main() { int drink; while(cin>>drink){ int bottle = drink; while(drink >= 7){ bottle += drink/7; drink = drink/7 + drink%7; } cout<<bottle<<endl; } }

November 6, 2020 · 1 min · CPP

[C++] 期中考第二題

期中考第二題:提款卡密碼 a b c d . . . 照順序排序,計算他們相間的距離 將上述做法具現化,可以利用 ASCII 將兩字元的 ASCII 相減,就是他們之間的距離 因為差有可能為負,且距離不為負,所以加上 <cmath> 的 abs() 絕對值 超過 9 之後,則取個位數字,可以利用 % 來實現 ASCII 欲做運算需將它轉形態(cast),所以利用 int 轉為整數形態 for 迴圈遍歷 word 中每一個字元,且索引 i 與 i+1 的值 注意上述做法 i 會跑到 < length-1 ZeroJudge 類似題目:Zerojudge a065:提款卡密碼 參考程式碼: #include <iostream> #include <cmath> using namespace std; int main() { string word; cin>>word; int length = word.size(); for(int i=0;i<length-1;i++){ cout<<int ( abs(word[i+1]-word[i]) ) % 10; } cout<<endl; }

November 6, 2020 · 1 min · CPP

[C++] 進制轉換

可能是因為高中課業繁忙吧,當初覺得 STL 對我來說太多餘了, 所以就沒興趣學了,也就放掉了。 這次重拾 STL ,先從簡單的 vector 來練練手, 並用進制轉換當做主題! ※ STL 是 Standrad Template Library 的縮寫 十進位轉二進位: 以二進位定義計算 並將每次的結果插入 vector 的起點(後面解釋為什麼是 insert ) 傳入:整數(int) 回傳:陣列(vector) vector<int> baseBinary(int number){ vector<int> result; vector<int>::iterator it; while(number>0){ it = result.begin(); if (number%2==0) result.insert(it,0); else result.insert(it,1); number /= 2; } return result; } 印出二進位: 因為二進位算完後,答案是結果往前推,所以用的是 insert 這樣一來陣列遍歷就從 begin 就好了 iterator 有點像是 for vector 的 指標 ,想要知道其中的值要 取值 (*) 傳入:陣列(vector) 回傳:無(void) void print(vector<int> number){ vector<int>::iterator it; for(it=number....

November 4, 2020 · 1 min · CPP