### 編號:01 ### 題目:C++ 開發環境 - 撰寫第一個程式 ### 內容 印出字串"Hello World"。 #### 輸入說明 無 #### 輸出說明 輸出字串"Hello World" ##### 範例輸入 #1 ``` 無 ``` ##### 範例輸出 #1 ``` Hello ``` ### 編號:02 ### 題目:C++ 開發環境 – 取得輸入資料 ### 內容 參考以下程式,使用 cin 取得姓名,輸出「Hello 姓名」(中間有一個空格)。 ``` #include <iostream> #include <string> using namespace std; int main() { string name; // 請從選項複製適當程式碼置於此處 cout << "Hello " << name << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. name << cin; 2. name >> cin; 3. cin << name; 4. cin >> name; #### 輸入說明 輸入一個不包含空格的字串 #### 輸出說明 Hello 姓名。Hello和姓名中間要有一格空格 ##### 範例輸入 #1 ``` John ``` ##### 範例輸出 #1 ``` Hello John ``` ### 編號:03 ### 題目:資料型態 – 強制型別轉換 ### 內容 參考以下程式,使用 cin 取得二個整數,輸出二數相除為浮點數的結果。 ``` #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; // 請從選項複製適當程式碼置於此處 return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cout << float(a) / b << endl; 2. cout << float(a / b) << endl; 3. cout << a / b << endl; #### 輸入說明 輸入一行,包含二個整數以空格分開 整數範圍 -2147483648 到 2147483647 #### 輸出說明 二數相除為浮點數的結果 ##### 範例輸入 #1 ``` 7 2 ``` ##### 範例輸出 #1 ``` 3.5 ``` ### 編號:04 ### 題目:變數命名及指派 – 格式化輸出 ### 內容 參考以下程式,使用 cin 取得一個整數。 輸出此數轉成十六進位及八進位的的結果。 ``` #include <iostream> using namespace std; int main() { int i; cin >> i; // 請從選項複製適當程式碼置於此處 return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cout << hex(i) << endl; cout << oct(i) << endl; 2. cout << oct(i) << endl; cout << hex(i) << endl; 3. cout << hex << i << endl; cout << oct << i << endl; 4. cout << oct << i << endl; cout << hex << i << endl; #### 輸入說明 輸入一個整數 i,0 <= i <= 10000 #### 輸出說明 輸出二行: 第一行是 i 的十六進位表示法 第二行是 i 的八進位表示法 ##### 範例輸入 #1 ``` 15 ``` ##### 範例輸出 #1 ``` f 17 ``` ### 編號:05 ### 題目:運算子及運算元 - 算術運算子 ### 內容 參考以下程式,使用 cin 取得 4 個整數,分別代表 a, b, c, d。 請分別計算 b/a + c/b + d/b 的整數計算結果,以及 d/b 的餘數。 ``` #include <iostream> using namespace std; int main() { int a, b, c, d; int ans1, ans2 ; cin >> a >> b >> c >> d; // 請從選項複製適當程式碼置於此處 cout << ans1 << endl; cout << ans2 << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. ans1 = a/b + c/b + d/b; ans2 = d % b; 2. ans1 = b/a + c/b + d/b; ans2 = d % b; 3. ans1 = a/b + c/b + d/b; ans2 = d / b; 4. ans1 = b/a + c/b + d/b; ans2 = d / b; #### 輸入說明 輸入一行,包含 4 個整數以空格分開,分別代表 a, b, c, d 整數範圍 -2147483648 到 2147483647 #### 輸出說明 輸出二行 第一行是 b/a + c/b + d/b 的整數計算結果 第二行是 d / b 的餘數 ##### 範例輸入 #1 ``` 2 3 4 5 ``` ##### 範例輸出 #1 ``` 3 2 ``` ### 編號:06 ### 題目:運算子及運算元 – 平方及開根號 ### 內容 參考以下程式,使用 cin 取得 3 個整數,分別代表 h, i, j。 請分別計算 h 的 i 次方,以及 j 的平方根。 ``` #include <iostream> #include <math.h> using namespace std; int main() { int h, i, j; int a, b; cin >> h >> i >> j; // 請從選項複製適當程式碼置於此處 cout << a << endl; cout << b << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. a = sqrt(i, h); b = pow(j); 2. a = sqrt(h, i); b = pow(j); 3. a = pow(i, h); b = sqrt(j); 4. a = pow(h, i); b = sqrt(j); #### 輸入說明 輸入一行,包含 3 個整數以空格分開,分別代表 h, i, j h: -100 到 100 i: 0 到 10 j: 0 到 10000 #### 輸出說明 輸出二行: 第一行是 h 的 i 次方 第二行是 j 的平方根(取整數) ##### 範例輸入 #1 ``` 2 3 9 ``` ##### 範例輸出 #1 ``` 8 9 ``` ### 編號:07 ### 題目:運算子及運算元 – 關係運算子 ### 內容 參考以下程式,由輸入取得二個整數,輸出這二個整數大小關係。 ``` #include <iostream> using namespace std; int main() { int m, n; int a, b, c; cin >> m >> n; // 請從選項複製適當程式碼置於此處 cout << a << endl; cout << b << endl; cout << c << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. a = m > n; b = m < n; c = m == n; 2. a = m > n; b = m < n; c = m = n; 3. a = m < n; b = m > n; c = m == n; 4. a = m < n; b = m > n; c = m = n; #### 輸入說明 輸入一行,包含 2 個整數 m, n 以空格分開 -2147483648 <= m, n <= 2147483647 #### 輸出說明 輸出三行: 第一行是 m 是否大於 n 第二行是 m 是否小於 n 第三行是 m 是否等於 n ##### 範例輸入 #1 ``` 3 5 ``` #### 範例輸出 #1 ``` 0 1 0 ``` ### 編號:08 ### 題目:運算子及運算元 – 邏輯運算子Ⅰ ### 內容 參考以下程式,由輸入取得二個整數 a, b。 輸出三行,分別是以下三種結果: 1. NOT a 2. a > 0 且 b > 0 3. a > 0 或 b > 0 ``` #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; // 請從選項複製適當程式碼置於此處 cout << not_a << endl; cout << and_result << endl; cout << or_result << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. bool not_a = !a; bool and_result = (a > 0) & (b > 0); bool or_result = (a > 0) | (b > 0); 2. bool not_a = ~a; bool and_result = (a > 0) && (b > 0); bool or_result = (a > 0) || (b > 0); 3. bool not_a = !a; bool and_result = (a > 0) && (b > 0); bool or_result = (a > 0) || (b > 0); 4. bool not_a = ~a; bool and_result = (a > 0) & (b > 0); bool or_result = (a > 0) | (b > 0); #### 輸入說明 輸入一行,包含 2 個整數 a, b 以空格分開 -10 < a, b < 10 #### 輸出說明 輸出三行,分別是以下三種結果: 1. NOT a 2. a > 0 且 b > 0 3. a > 0 或 b > 0 ##### 範例輸入 #1 ``` 1 0 ``` ##### 範例輸出 #1 ``` 0 0 1 ``` ### 編號:09 ### 題目:運算子及運算元 – 邏輯運算子Ⅱ ### 內容 參考以下程式,由輸入取得二個整數 a, b。 輸出二行,分別是以下二種結果: 1. a > 0 OR b > 0 2. a == 1 XOR b == 0 ``` #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; // 請從選項複製適當程式碼置於此處 cout << or_result << endl; cout << xor_result << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. bool or_result = (a > 0) or (b > 0); bool xor_result = (a == 1) xor (b == 0); 2. bool or_result = (a > 0) || (b > 0); bool xor_result = (a == 0) ^ (b == 0); 3. bool or_result = (a > 0) | (b > 0); bool xor_result = (a == 1) ^ (b == 0); 4. bool or_result = (a > 0) || (b > 0); bool xor_result = (a == 1) ^ (b == 0); #### 輸入說明 輸入一行,包含 2 個整數 a, b 以空格分開 -10 < a, b < 10 #### 輸出說明 輸出二行,分別是以下二種結果: 1. a > 0 OR b > 0 2. a == 1 XOR b == 0 ##### 範例輸入 #1 ``` 1 0 ``` ##### 範例輸出 #1 ``` 1 0 ``` ### 編號:10 ### 題目:流程控制 – 關係運算子條件 ### 內容 參考以下程式,由輸入取得二個整數 a, b。 依 a, b 二數的大小關係,輸出「a 小於 b」或「a 不小於 b」 ``` #include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; // 請從選項複製適當程式碼置於此處 cout << "a 小於 b" << endl; } else { cout << "a 不小於 b" << endl; } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. if (a < b) { 2. if (a <= b) { 3. if (a > b) { 4. if (a >= b) { #### 輸入說明 輸入一行,包含 2 個整數 a, b 以空格分開 -10 < a, b < 10 #### 輸出說明 輸出一行,表示 a, b 二數的大小關係: 「a 小於 b」或「a 不小於 b」 ##### 範例輸入 #1 ``` 10 20 ``` ##### 範例輸出 #1 ``` a 小於 b ``` ### 編號:11 ### 題目:流程控制 – 三元運算子 ### 內容 參考以下程式,由輸入取得一個整數 score。 請協助判斷 score 是及格或不及格 ``` #include <iostream> using namespace std; int main() { int score; cin >> score; // 請從選項複製適當程式碼置於此處 cout << s << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. string s = score < 60 ? "及格" : "不及格"; 2. string s = score <= 60 ? "及格" : "不及格"; 3. string s = score > 60 ? "及格" : "不及格"; 4. string s = score >= 60 ? "及格" : "不及格"; #### 輸入說明 輸入一個整數 score 0 <= score <= 100 #### 輸出說明 輸出一行表示 score 及格或不及格 ##### 範例輸入 #1 ``` 80 ``` ##### 範例輸出 #1 ``` 及格 ``` ### 編號:12 ### 題目:流程控制 – 複合條件 ### 內容 參考以下程式,由輸入取得一個整數 year 代表西元年。 請協助判斷 year 是閏年或平年 ``` #include <iostream> using namespace std; int main() { int year; cin >> year; // 請從選項複製適當程式碼置於此處 cout << year << " 是閏年" << endl; } else { cout << year << " 是平年" << endl; } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. if ((year % 4 != 0 && year % 100 != 0) || year % 400 == 0) { 2. if ((year % 4 == 0 && year % 100 != 0) || year % 400 != 0) { 3. if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { 4. if ((year % 4 == 0 && year % 100 == 0) || year % 400 == 0) { #### 輸入說明 輸入一個整數 year 0 <= year <= 10000 #### 輸出說明 輸出一行: year 是閏年 或 year 是平年 ##### 範例輸入 #1 ``` 2024 ``` ##### 範例輸出 #1 ``` 2024 是閏年 ``` ### 編號:13 ### 題目:流程控制 – switch 語法 ### 內容 參考以下程式,由輸入取得一個整數 month 代表月份。 如果 month 介於 1 到 4 之間,輸出 month 的中文寫法; 如果 month 大於 4,輸出「不是一到四月之間的月份」 ``` #include <iostream> using namespace std; int main() { int month; cin >> month; // 請從選項複製適當程式碼置於此處 case 1: cout << "一月"; break; case 2: cout << "二月"; break; case 3: cout << "三月"; break; case 4: cout << "四月"; break; default: cout << "不是一到四月之間的月份"; } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. if (month) { 2. switch (month) { 3. for (month) { 4. where (month) { #### 輸入說明 輸入一個整數 month,1 <= month <= 12 #### 輸出說明 輸出一行: 如果 month 介於 1 到 4 之間,輸出 month 的中文寫法; 如果 month 大於 4,輸出「不是一到四月之間的月份」 ##### 範例輸入 #1 ``` 4 ``` ##### 範例輸出 #1 ``` 四月 ``` ### 編號:14 ### 題目:上學放學 ### 內容 輸入一個時間,請判斷上學或放學。 上學時間定義為上午七點半(包含七點半)到下午五點(不包含五點)。 #### 輸入說明 輸入為 24小時制。 格式為 hh(時) mm(分),以空白隔開 0 <= hh <= 23 0 <= mm <= 59 #### 輸出說明 輸出一行上學或放學 ##### 範例輸入 #1 ``` 17 00 ``` ##### 範例輸出 #1 ``` 放學 ``` ### 編號:15 ### 題目:流程控制 – while 迴圈 ### 內容 參考以下程式,由輸入取得一個整數 n。 計算 1 加到 n 的總和。 ``` #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; int i = 1; // 請從選項複製適當程式碼置於此處 sum += i; i++; } cout << sum << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. while (i <= n) { 2. while (i <= sum) { 3. while (i < n) { 4. while (i < sum) { #### 輸入說明 輸入一個整數 n #### 輸出說明 輸出 1 加到 n 的總和 ##### 範例輸入 #1 ``` 10 ``` ##### 範例輸出 #1 ``` 55 ``` ### 編號:16 ### 題目:流程控制 – for 迴圈 ### 內容 參考以下程式,由輸入取得一個整數 n。 計算 1 加到 n 的總和。 ``` #include <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; // 請從選項複製適當程式碼置於此處 sum += i; } cout << sum << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. for (int i = 0; i < n; i++) { 2. for (int i = 1; i <= n; i++) { 3. for (int i = 0; i < n; i++) { 4. for (int i = 1; i <= n; i++) { #### 輸入說明 輸入一個整數 n 0 <= n <= 1000 #### 輸出說明 輸出 1 加到 n 的總和 ##### 範例輸入 #1 ``` 10 ``` ##### 範例輸出 #1 ``` 55 ``` ### 編號:17 ### 題目:新冠病毒 ### 內容 假設新冠病毒數量每一天會增加三倍,我們的檢驗試劑要在 X 個病毒才會顯示確診。 假設一開始接觸到了 a 個病毒,幾天後會確診(接觸病毒當天不算)? #### 輸入說明 輸入一行,包含二個整數,分別代表 a, X,中間以空格分隔 a: 1 到 1000 X: 100 到 1000000 #### 輸出說明 輸出一個整數代表天數 ##### 範例輸入 #1 ``` 1 10 ``` ##### 範例輸出 #1 ``` 3 ``` ### 編號:18 ### 題目:函式 - 內建函式 ### 內容 由輸入取得一個浮點數。 依序輸出該浮點數的絕對值、無條件進位整數值、無條件捨去整數值及四捨五入整數值。 #### 輸入說明 輸入一個浮點數 f #### 輸出說明 依序輸出 f 的絕對值、無條件進位整數值、無條件捨去整數值及四捨五入整數值。 ##### 範例輸入 #1 ``` -2.6 ``` ##### 範例輸出 #1 ``` 2.6 -2 -3 -3 ``` ### 編號:19 ### 題目:函式 - 重新組合字串 ### 內容 由輸入取得一串文字。 將該字串重新組合成奇數字在前,偶數字在後的新字串後輸出。 #### 輸入說明 輸入一行文字字串 s。 #### 輸出說明 輸出一行新字串 s_new s_new 是將原字串 s 重新組合成奇數字在前,偶數字在後的新字串。 ##### 範例輸入 #1 ``` apple ``` ##### 範例輸出 #1 ``` apepl ``` ### 編號:20 ### 題目:函式 – 溫度單位換算 ### 內容 參考以下程式,由輸入取得華氏溫度。 請換算成攝氏溫度輸出。 換算公式如下: $C = \frac{5}{9} \left( F - 32 \right)$ ``` #include <iostream> #include <iomanip> using namespace std; float f2c(float f); float f2c(float f) { // 請從選項複製適當程式碼置於此處 return c; } int main() { float F; cin >> F; cout << fixed << setprecision(1) << f2c(F) << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. float c = f * (9 / 5) + 32; 2. float c = f * (9 / 5) - 32; 3. float c = (f + 32) * 5 / 9; 4. float c = (f - 32) * 5 / 9; #### 輸入說明 輸入一個浮點數 F,表示華氏溫度。 #### 輸出說明 輸出一個浮點數 c,表示 F 的攝氏溫度。 ##### 範例輸入 #1 ``` 82.5 ``` ##### 範例輸出 #1 ``` 28.1 ``` ### 編號:21 ### 題目:與惡的距離 ### 內容 給定 4 個數字,請計算每個數字與 2 的距離總和。 #### 輸入說明 輸入一行,包含四個整數,中間以空格分隔 整數範圍 -2147483648 到 2147483647 #### 輸出說明 輸出一個整數代表距離總和 ##### 範例輸入 #1 ``` 1 2 3 4 ``` ##### 範例輸出 #1 ``` 4 ``` ### 編號:22 ### 題目:ASCII 對應 ### 內容 利用迴圈印出 a 到 z。 #### 輸入說明 無 #### 輸出說明 輸出一行 a 到 z ##### 範例輸入 #1 ``` ``` ##### 範例輸出 #1 ![a-z](https://hackmd.io/_uploads/SytKVU6HR.png) ### 編號:23 ### 題目:反轉大小寫 ### 內容 輸入一個英文字元。 若輸入的英文字母為小寫則輸出大寫,反之則輸出小寫。 #### 輸入說明 輸入一個字元 #### 輸出說明 輸出一個字元 若輸入的英文字母為小寫則輸出大寫,反之則輸出小寫。 ##### 範例輸入 #1 ``` a ``` ##### 範例輸出 #1 ``` A ``` ### 編號:24 ### 題目:字元字串 – 輸入字串 ### 內容 參考以下程式,由輸入取得一行文字。 再將該行文字輸出。 ``` #include <iostream> using namespace std; int main() { string s1; // 請從選項複製適當程式碼置於此處 cout << s1; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cout >> s1; 2. cin >> s1; 3. getline(cout, s1); 4. getline(cin, s1); #### 輸入說明 輸入一行文字 #### 輸出說明 將輸入的該行文字輸出 ##### 範例輸入 #1 ``` I Love C++ ``` ##### 範例輸出 #1 ``` I Love C++ ``` ### 編號:25 ### 題目:待辦清單 ### 內容 由輸入取得 n 行文字,1 <= n <= 100,讀取至 EOF 為止。 輸出時,再由最後一項開始依序往前顯示。 #### 輸入說明 輸入 n 行文字,至 EOF 為止。 #### 輸出說明 輸出 n 行文字 由輸入 n 行文字的最後一項開始依序往前輸出。 ##### 範例輸入 #1 ``` 刷牙 洗臉 去 7-11 繳費 ``` ##### 範例輸出 #1 ``` 去 7-11 繳費 洗臉 刷牙 ``` ##### 提示 使用 vector 存放字串 ### 編號:26 ### 題目:字元字串 – 字串長度 ### 內容 參考以下程式,由輸入取得一行文字。 輸出該行文字的長度。 ``` #include <iostream> using namespace std; int main() { string s; getline(cin, s); // 請從選項複製適當程式碼置於此處 return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cout << s.append(); 2. cout << s.find(); 3. cout << s.size(); 4. cout << s.empty(); #### 輸入說明 輸入一行文字 #### 輸出說明 輸出該行文字的長度 ##### 範例輸入 #1 ``` Hello World! ``` ##### 範例輸出 #1 ``` 12 ``` ### 編號:27 ### 題目:取得最後一個字 ### 內容 由輸入取得一行文字。 程式輸出此行字串的最後一個字元。 #### 輸入說明 輸入一行文字 #### 輸出說明 輸出此行字串的最後一個字元 ##### 範例輸入 #1 ``` Hello World! ``` ##### 範例輸出 #1 ``` ! ``` ### 編號:28 ### 題目:籬笆加密法 ### 內容 籬笆加密法是一種古典加密方式,將明文字串加密成密文。 加密方式是先決定把所有文字折成數個組數(例如2組),再來給各組加密。 例如分成二組為例(文字為September): * 第1組加密文字: 由第1個字元開始,每隔2個取出字元,得到Spebr * 第2組加密文字: 由第2個字元開始,每隔2個取出字元,得到etme * 將第1組和第2組加密文字合併成密文。Spebr+etme=Spebretme #### 輸入說明 輸入一行文字 #### 輸出說明 籬笆加密法加密後的密文字串 ##### 範例輸入 #1 ``` September ``` ##### 範例輸出 #1 ``` Spebretme ``` ### 編號:29 ### 題目:凱薩密碼 ### 內容 凱薩密碼是一種古典加密方式 1. 首先決定加密金鑰,當加密金鑰是3 2. 則明文字串中的每一個英文字母,都會轉換成該字母在英文字母序列中後面第3個字母。 3. 就是a會轉換為d,b會轉換為e,…依此類推。而x則會回到開始的a,y則轉換為b,z轉為c。 #### 輸入說明 一個全為小寫的字串 #### 輸出說明 凱薩密碼加密後的密文字串,加密金鑰為3 ##### 範例輸入 #1 ``` hello ``` ##### 範例輸出 #1 ``` khoor ``` ### 編號:30 ### 題目:更改附檔名 ### 內容 由輸入取得 n 行檔案名稱,讀取至 EOF 為止。 將所有的檔案的副檔名改為 .png 後,依序輸出。 #### 輸入說明 輸入 n 行文字,至 EOF 為止。 1 <= n <= 100 #### 輸出說明 將所有的檔案的副檔名改為 .png 後,依序輸出 ##### 範例輸入 #1 ``` image.jpg document.txt presentation.pptx file ``` ##### 範例輸出 #1 ``` image.png document.png presentation.png file.png ``` ### 編號:24 ### 題目:字元字串 – 字串分割 ### 內容 參考以下程式,由輸入取得一行多個文字,用空白隔開。 將每個文字依序輸出,一個字一行。 ``` #include<bits/stdc++.h> using namespace std; int main() { string str; getline(cin, str); stringstream ss(str); string token; // 請從選項複製適當程式碼置於此處 cout << token << endl; } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. while (getline(ss, token, ',')) { 2. while (getline(ss, token, ' ')) { 3. while (getline(cin, token, ',')) { 4. while (getline(cin, token, ' ')) { #### 輸入說明 輸入一行用空白分隔的多個文字 #### 輸出說明 將每個文字輸出,一行一個 ##### 範例輸入 #1 ``` Hello this is C++ ``` ##### 範例輸出 #1 ``` Hello this is C++ ``` ### 編號:31 ### 題目:加總 ### 內容 輸入用半形逗號隔開的一串數字。 請將這些數字加總後輸出。 #### 輸入說明 輸入一行用半形逗號隔開的一串數字 數字範圍 -10000 到 10000 #### 輸出說明 輸出所有數字的總和 ##### 範例輸入 #1 ``` 11,22,33,44,55 ``` ##### 範例輸出 #1 ``` 165 ``` ### 編號:32 ### 題目:學生分數管理 ### 內容 由輸入取得一組數據代表班上學生的國文成績。座號從 1 號起算,班上同學至少 8 個人。 接下來做以下處理: 1. 轉來一個同學座號在最後一號 2. 轉來一個同學座號 3 號後面座號順延 3. 座號 4, 5, 6 共 3 個同學轉走,後面往前遞補 4. 全班同學分數全部加10分 請輸出: 1. 現在班上總共多少人? 2. 全班的成績,以空白隔開 #### 輸入說明 輸入三行: 1. 第一行有 n 個整數,代表 n 個同學的成績,中間以空白隔開,n ≥ 8。 2. 第二行代表轉來最後一號同學的成績 3. 第三行代表轉來座號 3 號同學的成績 #### 輸出說明 輸出二行: 1. 第一行代表全班人數 2. 第二行輸出全班成績,以空白隔開 ##### 範例輸入 #1 ``` 61 63 75 59 87 93 77 91 91 79 ``` ##### 範例輸出 #1 ``` 7 71 73 89 103 87 101 91 ``` ### 編號:33 ### 題目:演算法 – 循序搜尋(找得到) ### 內容 已知數列 {1, 9, 7, 3, 5} 參考以下程式,由輸入取得一個數字,輸出這個數字在數列出現的索引值。 ``` #include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 9, 7, 3, 5}; int target; cin >> target; for (int i = 0; i < v.size(); i++){ // 請從選項複製適當程式碼置於此處 } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. if (v[i] != target) cout << i << endl; 2. if (v[i] == target) cout << i << endl; 3. if (v[i] != target) cout << i + 1 << endl; 4. if (v[i] == target) cout << i + 1 << endl; #### 輸入說明 輸入一個數字,是 1, 3, 5, 7, 9 其中一個。 #### 輸出說明 輸出這個數字在數列出現的索引值 ##### 範例輸入 #1 ``` 9 ``` ##### 範例輸出 #1 ``` 1 ``` ### 編號:34 ### 題目:演算法 – 循序搜尋(可能找不到) ### 內容 已知數列 {1, 9, 7, 3, 5} 參考以下程式,由輸入取得一個數字,輸出這個數字在數列出現的索引值。 如果找不到輸出 -1 ``` #include <iostream> #include <vector> using namespace std; int main() { vector<int> v = {1, 9, 7, 3, 5}; int target; cin >> target; bool found = false; for (int i = 0; i < v.size(); i++){ if (v[i] == target) { // 請從選項複製適當程式碼置於此處 found = true; } } if (!found) { cout << -1 << endl; } return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cout << v[i + 1] << endl; found = true; 2. cout << v[i] << endl; found = true; 3. cout << i + 1 << endl; found = true; 4. cout << i << endl; found = true; #### 輸入說明 輸入一個數字 n,0 <= n <= 10。 #### 輸出說明 如果 n 在數列中,輸出 n 在數列出現的索引值 如果 n 不在數列中,則輸出 -1 ##### 範例輸入 #1 ``` 9 ``` ##### 範例輸出 #1 ``` 1 ``` ### 編號:35 ### 題目:千里尋他千百度 ### 內容 已知數列 {2, 8, -5, -6, 2, 4, -2, -10, -4, 4} 請設計一個程式,由輸入取得一個數字,程式輸出這個數字在數列第一次出現是第幾項(最左邊為第一項)。 若此數不存在於數列中,則輸出 0。 #### 輸入說明 輸入一個整數 n,-10 <= n <= 10 #### 輸出說明 n 在數列第一次出現是第幾項(最左邊為第一項) ##### 範例輸入 #1 ``` 8 ``` ##### 範例輸出 #1 ``` 2 ``` ### 編號:36 ### 題目:演算法 – 比較並交換 ### 內容 參考以下程式,由輸入取得二個數字 a, b。 如果 a > b ,請將二數交換後輸出。 ``` #include <iostream> using namespace std; int main() { int a, b, cup; cin >> a >> b; if (a > b) { // 請從選項複製適當程式碼置於此處 } cout << a << " " << b << endl; return 0; } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. cup = b; a = b; b = cup; 2. cup = b; b = a; b = cup; 3. cup = a; a = b; b = cup; 4. cup = a; b = a; b = cup; #### 輸入說明 輸入二個整數 a, b,0 <= a, b <= 10。 #### 輸出說明 輸出一行 ##### 範例輸入 #1 ``` 5 2 ``` ##### 範例輸出 #1 ``` 2 5 ``` ### 編號:37 ### 題目:演算法 – 氣泡排序 ### 內容 參考以下程式,由輸入一由空白分隔的整數列。 使用氣泡排序法由小至大進行排序。每一輪比較之後,需要將目前狀態的串列輸出。 ``` #include <iostream> #include <sstream> #include <vector> using namespace std; int main() { string str; getline(cin, str); istringstream sst(str); int num; vector<int> v; while (sst >> num) { v.push_back(num); } for (int j = 1; j <= v.size() - 1; j++){ // 請從選項複製適當程式碼置於此處 if (v[i - 1] > v[i]) { int cup = v[i - 1]; v[i - 1] = v[i]; v[i] = cup; } } for (int i = 0; i < v.size(); i++) { if (i < v.size() - 1) cout << v[i] << " "; else cout << v[i] << endl; } } } ``` 提示: 可從選項複製正確的程式碼執行。 選項 1. for (int i = v.size() - 1; i > 0; i--) { 2. for (int i = v.size() - 1; i > 0; i++) { 3. for (int i = 0; i < v.size(); i--) { 4. for (int i = 0; i < v.size(); i++) { #### 輸入說明 一行以空格分開的整數 #### 輸出說明 每輪比較後,輸出結果串列 ##### 範例輸入 #1 ``` 1 9 7 3 5 ``` ##### 範例輸出 #1 ``` 1 3 9 7 5 1 3 5 9 7 1 3 5 7 9 1 3 5 7 9 ``` ### 編號:38 ### 題目:精打細算優惠 ### 內容 某間便利商店推出優惠「買三送一」,優惠內容為任三件商品結帳取最低價者免費。 小新買了很多東西,並且思考怎樣結帳才能最便宜。 請你寫一個程式幫小新計算最便宜的優惠總價! #### 輸入說明 輸入共一行,有若干個整數代表商品價格,最後一個數為 0 代表結束輸入。 #### 輸出說明 輸出最優惠情況的商品總價格。 ##### 範例輸入 #1 ``` 10 20 30 40 50 60 0 ``` ##### 範例輸出 #1 ``` 160 ``` ### 編號:39 ### 題目:二元搜尋法 ### 內容 先由輸入取得一系列由空白分隔的整數列,以及想在數列中搜尋的值。 使用任何你所知道的方法將數列進行排序。先輸出排序後的數列。 再以二元搜尋法進行搜尋。每次尋找必須輸出當次的起始值及結束值。 如果找到則輸出找到索引值;如果找不到則輸出-1。 #### 輸入說明 依序分二次輸入,第一次是一行以空格分開的整數;第二次則是一個整數,代表要在數列中搜尋的值。 #### 輸出說明 先輸出排序後的串列。接著每次尋找都需要輸出起始和結束索引值,中間以空白分隔。 如果找到則輸出找到索引值;如果找不到則輸出-1。 ##### 範例輸入 #1 ``` 10 4 2 5 1 3 4 ``` ##### 範例輸出 #1 ``` 1 2 3 4 5 10 0 5 3 5 3 3 3 ```