枚舉算法
題目 1:找出 1-20 中既是偶數又是 3 的倍數的數
題目描述:小明想找出 1 到 20 中既能被 2 整除又能被 3 整除的數字,幫他列出來吧。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 1; a <= 20; a++) {if (a % 2 == 0 && a % 3 == 0) { // 同時滿足兩個條件cout << a << " ";}}return 0;
}
解釋:用for
循環枚舉 1-20 的每個數,通過&&
判斷是否同時滿足 "被 2 整除" 和 "被 3 整除",符合條件就輸出。
題目 2:找出個位是 5 的兩位數
題目描述:列出所有個位是 5 的兩位數(10-99 之間)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 10; a <= 99; a++) {if (a % 10 == 5) { // 個位是5的數除以10余數為5cout << a << " ";}}return 0;
}
解釋:循環枚舉所有兩位數,用a%10==5
判斷個位是否為 5,是的話就輸出。
題目 3:找特殊數字(1-10 中既不是奇數也不是合數的數)
題目描述:在 1-10 中,找出既不是奇數(排除 1,3,5,7,9)又不是合數(排除 4,6,8,9,10)的數字。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 1; a <= 10; a++) {// 偶數(不是奇數)且不是合數if (a % 2 == 0 && (a == 2)) {cout << a;}}return 0;
}
解釋:通過枚舉逐個判斷,1-10 中只有 2 是偶數且不是合數(合數指除了 1 和自身還有其他因數的數)。
題目 4:計算 1-10 中所有單數的和
題目描述:計算 1 到 10 中所有單數(1,3,5,7,9)的總和。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, s = 0;for (a = 1; a <= 10; a++) {if (a % 2 == 1) { // 單數除以2余數為1s = s + a;}}cout << s;return 0;
}
解釋:用s
記錄總和,循環中判斷如果是單數就加到s
里,最后輸出總和。
題目 5:找出能同時被 4 和 6 整除的三位數(100-200)
題目描述:在 100 到 200 之間,找出能同時被 4 和 6 整除的數。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 100; a <= 200; a++) {if (a % 4 == 0 && a % 6 == 0) {cout << a << " ";}}return 0;
}
解釋:枚舉 100-200 的數,同時滿足被 4 和 6 整除的數就是公倍數,通過&&
連接兩個條件判斷。
題目 6:找數字(1-50 中十位比個位大的數)
題目描述:找出 1-50 中十位數字比個位數字大的數(比如 21:十位 2 > 個位 1)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, s, g; // s是十位,g是個位for (a = 1; a <= 50; a++) {s = a / 10; // 取十位(如21/10=2)g = a % 10; // 取個位(如21%10=1)if (s > g) {cout << a << " ";}}return 0;
}
解釋:通過a/10
取十位數字,a%10
取個位數字,比較后輸出符合條件的數。
題目 7:判斷一個數是否在 3-7 之間(含邊界)
題目描述:輸入一個整數,判斷它是否在 3 到 7 之間(包括 3 和 7)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;cin >> a;if (a >= 3 && a <= 7) {cout << "是";} else {cout << "否";}return 0;
}
解釋:用&&
判斷輸入的數是否同時滿足大于等于 3 和小于等于 7,輸出對應結果。
題目 8:找出 1-100 中是 7 的倍數但不是 5 的倍數的數
題目描述:列出 1 到 100 中能被 7 整除,但不能被 5 整除的數。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 1; a <= 100; a++) {if (a % 7 == 0 && a % 5 != 0) {cout << a << " ";}}return 0;
}
解釋:枚舉范圍內的數,判斷是否是 7 的倍數且不是 5 的倍數,符合條件則輸出。
題目 9:計算 1-9 中所有雙數的乘積
題目描述:計算 1 到 9 中所有雙數(2,4,6,8)的乘積。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, p = 1; // p存儲乘積,初始值為1for (a = 1; a <= 9; a++) {if (a % 2 == 0) {p = p * a;}}cout << p;return 0;
}
解釋:用p
記錄乘積(初始為 1),循環中遇到雙數就相乘,最后輸出結果。
題目 10:找月份(一年中天數小于 30 的月份)
題目描述:一年有 12 個月份,其中 2 月(28 天)、4 月(30 天?不,4 月是 30 天,修正:2 月 < 30 天),請輸出天數小于 30 的月份數字。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 1; a <= 12; a++) {if (a == 2) { // 只有2月天數小于30cout << a << " ";}}return 0;
}
解釋:枚舉 1-12 月,判斷是否為 2 月(一年中唯一天數小于 30 的月份),是的話輸出。
模擬算法(新穎題型)
題目 1:模擬鐘表報時(輸入小時,輸出對應點數)
題目描述:輸入當前小時數(1-12),模擬鐘表報時,輸出對應數量的 "咚"(如輸入 3,輸出 "咚咚咚")。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b;cin >> a;for (b = 1; b <= a; b++) {cout << "咚";}return 0;
}
解釋:輸入小時數a
,循環a
次輸出 "咚",模擬鐘表報時的聲音。
題目 2:模擬電梯運行(從 1 樓到指定樓層)
題目描述:電梯初始在 1 樓,輸入目標樓層(1-10),輸出電梯經過的所有樓層(如輸入 5,輸出 "1 2 3 4 5")。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b;cin >> a;for (b = 1; b <= a; b++) {cout << b << " ";}return 0;
}
解釋:從 1 開始循環到目標樓層a
,依次輸出經過的樓層,模擬電梯上升過程。
題目 3:模擬水果拼盤(輸入兩種水果,交替輸出 3 次)
題目描述:輸入兩種水果名稱(如 "蘋果" 和 "香蕉"),交替輸出 3 次(結果:蘋果 香蕉 蘋果 香蕉 蘋果 香蕉)。
代碼:
cpp
運行
#include <iostream>
#include <string>
using namespace std;
int main() {string a, b;int c;cin >> a >> b;for (c = 1; c <= 3; c++) {cout << a << " " << b << " ";}return 0;
}
解釋:循環 3 次,每次輸出兩種水果,模擬交替擺放水果的過程。
題目 4:模擬分數統計(輸入 3 個成績,計算平均分)
題目描述:輸入 3 個 100 以內的整數(代表成績),計算并輸出它們的平均分(保留整數)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, avg;cin >> a >> b >> c;avg = (a + b + c) / 3; // 整數除法自動取整cout << avg;return 0;
}
解釋:輸入三個成績,求和后除以 3 得到平均分,模擬簡單的分數統計。
題目 5:模擬信號燈(紅黃綠依次亮 2 秒,輸出順序)
題目描述:交通信號燈按 "紅→黃→綠" 的順序循環,每次亮 2 秒,輸出前 3 次循環的順序(共 9 個狀態)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b;for (a = 1; a <= 3; a++) { // 3次循環for (b = 1; b <= 3; b++) { // 每次循環3個燈if (b == 1) cout << "紅 ";else if (b == 2) cout << "黃 ";else cout << "綠 ";}}return 0;
}
解釋:外層循環控制 3 次循環,內層循環依次輸出紅黃綠,模擬信號燈交替亮的過程。
題目 6:模擬折紙(一張紙對折 3 次后有幾層?)
題目描述:一張紙初始 1 層,每對折 1 次層數翻倍,輸入對折次數(1-5),輸出最終層數。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, c = 1; // c是層數,初始1層cin >> a;for (int b = 1; b <= a; b++) {c = c * 2; // 每次對折翻倍}cout << c;return 0;
}
解釋:用c
記錄層數,循環a
次(對折次數),每次乘以 2,模擬折紙層數變化。
題目 7:模擬排隊叫號(從 1 號開始,叫到指定號碼)
題目描述:醫院排隊叫號,從 1 號開始,輸入今天要叫的最后一個號碼(1-20),輸出所有被叫到的號碼。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b;cin >> a;for (b = 1; b <= a; b++) {cout << "請" << b << "號就診 ";}return 0;
}
解釋:循環從 1 到輸入的號碼a
,輸出叫號提示,模擬排隊叫號過程。
題目 8:模擬分配糖果(每人分 3 顆,余 2 顆,計算總糖果數)
題目描述:老師給小朋友分糖果,每人分 3 顆,最后還剩 2 顆,輸入小朋友人數(1-10),計算總糖果數。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, c;cin >> a;c = a * 3 + 2; // 每人3顆加剩余2顆cout << c;return 0;
}
解釋:根據人數a
計算總糖果數(人數 ×3+2),模擬糖果分配場景。
題目 9:模擬星期幾(輸入數字 1-7,輸出對應星期)
題目描述:輸入 1-7 的數字,1 代表星期一,2 代表星期二……7 代表星期日,輸出對應星期。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;cin >> a;if (a == 1) cout << "星期一";else if (a == 2) cout << "星期二";else if (a == 3) cout << "星期三";else if (a == 4) cout << "星期四";else if (a == 5) cout << "星期五";else if (a == 6) cout << "星期六";else cout << "星期日";return 0;
}
解釋:根據輸入的數字,用多分支if-else
判斷并輸出對應星期,模擬星期轉換。
題目 10:模擬植樹(每隔 2 米種 1 棵,從 0 米開始,種到 10 米)
題目描述:在一條路上從 0 米處開始種樹,每隔 2 米種 1 棵,一直種到 10 米處,輸出所有種樹的位置。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a;for (a = 0; a <= 10; a += 2) { // 每次加2米cout << a << "米處種樹 ";}return 0;
}
解釋:從 0 開始,每次增加 2 米(間隔),輸出種樹位置,模擬植樹過程。
排序算法(新穎題型)
題目 1:給三個水果按首字母排序(蘋果、香蕉、橙子)
題目描述:輸入三個水果名稱(蘋果、香蕉、橙子中的三個),按拼音首字母(A < X < C)排序后輸出。
代碼:
cpp
運行
#include <iostream>
#include <string>
using namespace std;
int main() {string a, b, c, t;cin >> a >> b >> c;// 比較交換a和bif (a > b) { t = a; a = b; b = t; }// 比較交換a和c(確保a最小)if (a > c) { t = a; a = c; c = t; }// 比較交換b和c(確保b中間)if (b > c) { t = b; b = c; c = t; }cout << a << " " << b << " " << c;return 0;
}
解釋:通過三次比較交換,將三個字符串按首字母順序排序(利用字符串比較規則)。
題目 2:給三個數字按從大到小排序
題目描述:輸入三個整數,按從大到小的順序輸出。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, t;cin >> a >> b >> c;if (a < b) { t = a; a = b; b = t; } // a和b交換,確保a>=bif (a < c) { t = a; a = c; c = t; } // a和c交換,確保a最大if (b < c) { t = b; b = c; c = t; } // b和c交換,確保b次之cout << a << " " << b << " " << c;return 0;
}
解釋:通過三次比較交換,先確保最大的數在a
,再確保中間的數在b
,實現從大到小排序。
題目 3:給兩個數字交換位置后輸出
題目描述:輸入兩個整數,交換它們的位置后輸出(如輸入 3 5,輸出 5 3)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, t;cin >> a >> b;t = a; // 臨時變量t保存a的值a = b; // 把b的值給ab = t; // 把t(原來的a)給bcout << a << " " << b;return 0;
}
解釋:用臨時變量t
作為中間容器,實現兩個變量的值交換,是排序的基礎操作。
題目 4:給四個數字中的最大值和最小值排序
題目描述:輸入四個整數,只輸出其中的最大值和最小值(按 "最大值 最小值" 順序)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, d, max, min;cin >> a >> b >> c >> d;max = a; // 假設a是最大值if (b > max) max = b;if (c > max) max = c;if (d > max) max = d;min = a; // 假設a是最小值if (b < min) min = b;if (c < min) min = c;if (d < min) min = d;cout << max << " " << min;return 0;
}
解釋:分別找出四個數中的最大值和最小值,按要求順序輸出,是簡化的排序問題。
題目 5:按身高排序(三個小朋友的身高)
題目描述:輸入三個小朋友的身高(厘米,整數),按從矮到高的順序輸出。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, t;cin >> a >> b >> c;// 冒泡排序思想:兩兩比較交換if (a > b) { t = a; a = b; b = t; }if (b > c) { t = b; b = c; c = t; }if (a > b) { t = a; a = b; b = t; } // 可能需要再比較一次a和bcout << a << " " << b << " " << c;return 0;
}
解釋:用冒泡排序的思想,通過多次兩兩比較交換,實現從矮到高排序。
題目 6:給三個字母按 ASCII 碼排序
題目描述:輸入三個小寫字母(a-z),按 ASCII 碼從小到大排序(a 最小,z 最大)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {char a, b, c, t;cin >> a >> b >> c;if (a > b) { t = a; a = b; b = t; }if (a > c) { t = a; a = c; c = t; }if (b > c) { t = b; b = c; c = t; }cout << a << " " << b << " " << c;return 0;
}
解釋:字符可以直接比較 ASCII 碼值,通過三次比較交換實現從小到大排序。
題目 7:按數量排序(蘋果、香蕉、橙子的數量)
題目描述:輸入蘋果、香蕉、橙子的數量(整數),按數量從少到多輸出對應的水果名稱(數量相同則按蘋果 < 香蕉 < 橙子)。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c; // a:蘋果, b:香蕉, c:橙子cin >> a >> b >> c;// 先比較數量,數量相同則按預設順序if (a <= b && a <= c) {cout << "蘋果 ";if (b <= c) cout << "香蕉 " << "橙子";else cout << "橙子 " << "香蕉";} else if (b <= a && b <= c) {cout << "香蕉 ";if (a <= c) cout << "蘋果 " << "橙子";else cout << "橙子 " << "蘋果";} else {cout << "橙子 ";if (a <= b) cout << "蘋果 " << "香蕉";else cout << "香蕉 " << "蘋果";}return 0;
}
解釋:先判斷數量最小值對應的水果,再處理剩余兩個,實現按數量排序。
題目 8:給三個數排序并標記位置(原位置 1,2,3)
題目描述:輸入三個數,按從小到大排序后,輸出每個數原來的位置(如輸入 5 3 7,輸出 "2 (3) 1 (5) 3 (7)")。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, p1=1, p2=2, p3=3, t, tp;cin >> a >> b >> c;// 交換數值時同時交換位置標記if (a > b) {t = a; a = b; b = t;tp = p1; p1 = p2; p2 = tp;}if (a > c) {t = a; a = c; c = t;tp = p1; p1 = p3; p3 = tp;}if (b > c) {t = b; b = c; c = t;tp = p2; p2 = p3; p3 = tp;}cout << p1 << "(" << a << ") " << p2 << "(" << b << ") " << p3 << "(" << c << ")";return 0;
}
解釋:排序時不僅交換數值,還同步交換位置標記,最后輸出帶原位置的排序結果。
題目 9:按年齡排序(三個小朋友的年齡)
題目描述:輸入三個小朋友的年齡(整數),按年齡從大到小排序,年齡相同則按輸入順序。
代碼:
cpp
運行
#include <iostream>
using namespace std;
int main() {int a, b, c, t;cin >> a >> b >> c;// 從大到小排序if (a < b) { t = a; a = b; b = t; }if (a < c) { t = a; a = c; c = t; }if (b < c) { t = b; b = c; c = t; }cout << a << " " << b << " " << c;return 0;
}
解釋:通過三次比較交換,實現年齡從大到小排序,年齡相同時不交換(保持輸入順序)。
題目 10:給 0-9 中的三個數字按字典序排序
題目描述:輸入三個 0-9 的數字,按字典序(即字符串順序)排序(如 1、10、2,字典序是 1、10、2)。
代碼:
cpp
運行
#include <iostream>
#include <string>
using namespace std;
int main() {string a, b, c, t; // 用字符串存儲數字cin >> a >> b >> c;if (a > b) { t = a; a = b; b = t; }if (a > c) { t = a; a = c; c = t; }if (b > c) { t = b; b = c; c = t; }cout << a << " " << b << " " << c;return 0;
}
解釋:將數字作為字符串處理,利用字符串比較的字典序規則進行排序,適合特殊排序需求。