林老师 · 客观题题库 · 第 11 章 枚举与模拟 · 知识细节练习

第 11 章 枚举与模拟 · 知识细节练习

100 题 · 每题对应一个知识细节 · 全部原创
真题
复刻
试卷编号ORIG-第11章枚举与模拟-知识细节练习
题目总数100 题 · 100 分
试卷类型客观题
考生须知:
① 本卷共 16 大部分,合计 100 题 · 100 分,全部为客观题;
② 试卷右上角设有 「提交答卷」「重置考试」 按钮,提交后系统自动判分并显示答题正确情况,请确认全部作答后再行提交;
③ 试卷不显示答案,提交后方可查看每题作答与正确答案的对照;
④ 答卷进度会保留在本地缓存中,刷新或再次打开仍可继续作答;
⑤ 本卷仅供学生练习使用;请勿用于其他用途;题面有问题请联系:i64coder@163.com。

判 分 报 告

0 / 100 分
0
答 对 · 得 0
0
答 错 · 失 0
当前筛选下没有题目

枚举基本概念

6 QUESTIONS · 2 POINTS EACH
第 1 题 A1 未作答

判断题:枚举(穷举)= 把问题的所有可能答案逐一列举并逐个判断是否符合要求。

(1 分)
第 2 题 A2 未作答

判断题:枚举的三要素:枚举范围(有哪些可能)、判断条件(是否符合要求)、答案更新(计数/求最值/记录)。

(1 分)
第 3 题 A3 未作答

判断题:枚举 1n1 \sim n 中满足条件的数,用一层 for 循环即可。

(1 分)
第 4 题 A4 未作答

判断题:枚举所有"数对"(如 i<ji < j 的两两组合)需要两层循环。

(1 分)
第 5 题 A5 未作答

判断题:枚举的时间复杂度 ≈ 枚举的规模(如枚举 1n1 \sim nO(n)O(n)、枚举所有数对是 O(n2)O(n^2))。

(1 分)
第 6 题 A6 未作答

判断题:能直接用公式算的问题(如等差数列求和)不必枚举——公式 O(1)O(1)、枚举 O(n)O(n)

(1 分)

常见枚举模式

7 QUESTIONS · 2 POINTS EACH
第 7 题 B1 未作答

判断题:"找出 11001 \sim 100 中所有 7 的倍数"是典型的单重枚举题。

(1 分)
第 8 题 B2 未作答

判断题:枚举 nn 个元素中所有两两组合(i<ji < j),共 n(n1)/2n(n-1)/2 对。

(1 分)
第 9 题 B3 未作答

判断题:nn 个元素的子集共 2n2^n 个,可以用二进制(02n10 \sim 2^n-1)逐位表示选取情况。

(1 分)
第 10 题 B4 未作答

判断题:nn 个元素的全排列共 n!n! 种,C++ 可用 next_permutation 逐个生成。

(1 分)
第 11 题 B5 未作答

判断题:枚举 nn 的所有因数只需试到 n\sqrt{n}(每找到一个因数 iin/in/i 也是因数)。

(1 分)
第 12 题 B6 未作答

判断题:"找出 110001 \sim 1000 中的所有回文数"是枚举 + 逐个数位判断。

(1 分)
第 13 题 B7 未作答

判断题:枚举前先估算规模——枚举量超过 10810^8 量级通常会超时,要换思路。

(1 分)

模拟基本概念

7 QUESTIONS · 2 POINTS EACH
第 14 题 C1 未作答

判断题:模拟 = 不找数学捷径,按题意一步步执行规则,跟踪状态变化。

(1 分)
第 15 题 C2 未作答

判断题:模拟题的通用流程:读入 → 初始化状态 → 循环按规则更新 → 输出结果。

(1 分)
第 16 题 C3 未作答

判断题:模拟的核心是"状态"——每轮循环按规则把当前状态更新成下一个状态。

(1 分)
第 17 题 C4 未作答

判断题:模拟过程中常用计数器(轮数、次数、数量)记录过程信息。

(1 分)
第 18 题 C5 未作答

判断题:报数/约瑟夫类问题用数组(或链表)记录"当前在场的人",逐步删除。

(1 分)
第 19 题 C6 未作答

判断题:日期类模拟要处理"进位":秒满 60 进分、分满 60 进时、时满 24 进天。

(1 分)
第 20 题 C7 未作答

判断题:输出图形(星号塔、数字三角形)用两层循环:外层行、内层列。

(1 分)

常见模拟场景

6 QUESTIONS · 2 POINTS EACH
第 21 题 D1 未作答

判断题:约瑟夫问题:n 人围圈,报到 k 出列——模拟到只剩一人。

(1 分)
第 22 题 D2 未作答

判断题:发牌模拟:按顺序把牌轮流发给 n 个人,可用"第 i 张发给第 i%n 人"。

(1 分)
第 23 题 D3 未作答

判断题:计算两个日期之间的天数,要逐月考虑大小月与闰年。

(1 分)
第 24 题 D4 未作答

判断题:36613661 秒 = 11 小时 1111 秒。

(1 分)
第 25 题 D5 未作答

输出 nn 行星号塔:第 ii 行有 2i12i-1 个星号,且每行居中(星号前用空格补齐)。例如 n=3n = 3 时输出:

  *
 ***
*****

判断题:上述星号塔第 ii 行有 2i12i-1 个星号(居中)。

(1 分)
第 26 题 D6 未作答

判断题:输出有规律的数字序列(如 1、22、333……),每行的数字 = 行号,重复行号次。

(1 分)

枚举优化

6 QUESTIONS · 2 POINTS EACH
第 27 题 E1 未作答

判断题:枚举中的剪枝 = 遇到不可能满足条件的值,提前跳过/终止,减少枚举量。

(1 分)
第 28 题 E2 未作答

判断题:枚举边界可以数学缩小——如枚举 a+b=10a+b=10aa,只需 0100 \sim 10 而不是 01060 \sim 10^6

(1 分)
第 29 题 E3 未作答

判断题:暴力枚举只适合数据规模小的题(如 n105n \le 10^5 单重、n103n \le 10^3 双重)。

(1 分)
第 30 题 E4 未作答

判断题:"枚举可能的答案,逐个验证是否满足条件"——枚举与判断分离的通用模式。

(1 分)
第 31 题 E5 未作答

判断题:打表 = 事先算好所有结果存起来,查询时 O(1)O(1) 取——用空间换时间。

(1 分)
第 32 题 E6 未作答

判断题:C++ 每秒约执行 10810^8 次简单运算——枚举量接近 10810^8 大约 1 秒。

(1 分)

模拟优化与实现

7 QUESTIONS · 2 POINTS EACH
第 33 题 F1 未作答

判断题:约瑟夫"围圈"用取模实现循环:pos = (pos + 1) % n

(1 分)
第 34 题 F2 未作答

判断题:循环数组模拟 = 下标取模:a[i % n] 让数组首尾相接。

(1 分)
第 35 题 F3 未作答

判断题:nn 盏灯的开/关可以用一个 nn 位二进制数表示(1 开 0 关)。

(1 分)
第 36 题 F4 未作答

判断题:给一串操作指令(push/pop),用栈或队列按序执行并输出结果。

(1 分)
第 37 题 F5 未作答

判断题:指令序列模拟:读入操作序列(如 +3 -2 +5),按序更新一个变量。

(1 分)
第 38 题 F6 未作答

判断题:回合制游戏模拟:外层循环是回合数,每轮按规则更新双方状态。

(1 分)
第 39 题 F7 未作答

判断题:模拟题调试的常用手段:每轮循环打印中间状态,对照样例找偏差。

(1 分)

综合技巧

6 QUESTIONS · 2 POINTS EACH
第 40 题 G1 未作答

判断题:枚举顺序影响"答案取谁":升序枚举第一次找到的最小、降序枚举第一次找到的最大。

(1 分)
第 41 题 G2 未作答

判断题:逆序枚举(从大到小)常用来求"最大的满足条件的数"。

(1 分)
第 42 题 G3 未作答

判断题:"有多少个数满足条件"——枚举 + 计数器,每命中一次 cnt++

(1 分)
第 43 题 G4 未作答

判断题:"最大的满足条件的数"——枚举时与当前最值比较更新。

(1 分)
第 44 题 G5 未作答

判断题:"是否存在满足条件的数"——枚举时一旦找到可提前结束(break/return)。

(1 分)
第 45 题 G6 未作答

判断题:模拟/枚举输出要按题意处理空格与换行(如每行末尾不能多余空格)。

(1 分)

易错综合

5 QUESTIONS · 2 POINTS EACH
第 46 题 H1 未作答

判断题:枚举边界 <<= 差一个数——"1 到 n"应写 i <= n

(1 分)
第 47 题 H2 未作答

判断题:模拟的初始状态设置错误,后面全盘皆错——初始化要与题意逐项核对。

(1 分)
第 48 题 H3 未作答

判断题:多轮模拟中,每轮开始要把计数/标记等变量重置,否则结果被上轮污染。

(1 分)
第 49 题 H4 未作答

判断题:模拟循环若状态一直不变(条件永远为真),会死循环——循环必须保证状态推进。

(1 分)
第 50 题 H5 未作答

下列说法错误的是( )。

(1 分)

单重枚举代码

6 QUESTIONS · 2 POINTS EACH
第 51 题 I1 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    cout << i << ' ';   // 依次输出 1 ~ n

判断题:输入 n=5n = 5 时输出 1 2 3 4 5

(1 分)
第 52 题 I2 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    if (i % 3 == 0 && i % 5 == 0)
05        cout << i << ' ';   // 同时被 3 和 5 整除

判断题:输入 n=20n = 20 时输出 15(20 以内只有 15 同时被 3、5 整除)。

(1 分)
第 53 题 I3 未作答

01int n, cnt = 0;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    if (i % 7 == 0) cnt++;   // 7 的倍数计数
05cout << cnt;

判断题:输入 n=30n = 30 时输出 44(7, 14, 21, 28 共 4 个)。

(1 分)
第 54 题 I4 未作答

01int n, sum = 0;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    if (i % 2 == 0) sum += i;   // 偶数求和
05cout << sum;

判断题:输入 n=10n = 10 时输出 3030(2+4+6+8+10)。

(1 分)
第 55 题 I5 未作答

01int n, x, mx = -1e9;
02cin >> n;
03for (int i = 1; i <= n; i++) {
04    cin >> x;
05    if (x > mx) mx = x;   // 找最大值
06}
07cout << mx;

判断题:输入 5 3 9 1 7 5 时输出 99

(1 分)
第 56 题 I6 未作答

01int n;
02cin >> n;
03for (int i = n; i >= 1; i--)
04    cout << i << ' ';   // 从 n 到 1

判断题:输入 n=4n = 4 时输出 4 3 2 1

(1 分)

双重枚举代码

7 QUESTIONS · 2 POINTS EACH
第 57 题 J1 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    for (int j = i + 1; j <= n; j++)
05        cout << i << ',' << j << ' ';

判断题:输入 n=3n = 3 时输出 1,2 1,3 2,3(所有 i<ji < j 的数对)。

(1 分)
第 58 题 J2 未作答

01// 枚举 1~n 中所有两两组合(i < j),输出组合个数
02int n, cnt = 0;
03cin >> n;
04for (int i = 1; i <= n; i++)
05    for (int j = i + 1; j <= n; j++)
06        cnt++;
07cout << cnt;

判断题:输入 n=4n = 4 时输出 66C42=6C_4^2 = 6)。

(1 分)
第 59 题 J3 未作答

01// 枚举 1~10 中两个数,判断 i*j == 12 的数对
02for (int i = 1; i <= 10; i++)
03    for (int j = i + 1; j <= 10; j++)
04        if (i * j == 12) cout << i << ' ' << j << endl;

判断题:输出 2 63 4 两行。

(1 分)
第 60 题 J4 未作答

01// 枚举三边 a < b < c(都在 1~5 内),判断能否构成三角形
02// 条件:a + b > c
03int cnt = 0;
04for (int a = 1; a <= 5; a++)
05    for (int b = a + 1; b <= 5; b++)
06        for (int c = b + 1; c <= 5; c++)
07            if (a + b > c) cnt++;
08cout << cnt;

判断题:输出 33((2,3,4)、(2,4,5)、(3,4,5) 三组)。

(1 分)
第 61 题 J5 未作答

01// 枚举 2020 年 1 月到 12 月,统计有 31 天的月份数(大月 1/3/5/7/8/10/12)
02int cnt = 0;
03for (int m = 1; m <= 12; m++)
04    if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) cnt++;
05cout << cnt;

判断题:上述代码输出 77

(1 分)
第 62 题 J6 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++) {
04    for (int j = 1; j <= i; j++)
05        cout << i * j << ' ';
06    cout << endl;
07}

输入 n=3n = 3 时输出:

1 
2 4 
3 6 9 

判断题:第三行输出 3 6 9

(1 分)
第 63 题 J7 未作答

01int n, cnt = 0;
02cin >> n;
03for (int i = 1; i <= n; i++)
04    for (int j = 1; j <= n; j++)
05        cnt++;
06cout << cnt;

判断题:输入 n=100n = 100 时输出 1000010000n2n^2 次计数,O(n2)O(n^2))。

(1 分)
拾壹

子集与排列枚举

7 QUESTIONS · 2 POINTS EACH
第 64 题 K1 未作答

01// 枚举 {1,2,3} 的所有子集:mask 从 0 到 7(2^3 - 1)
02// 第 i 位为 1 表示选中 i+1
03for (int mask = 0; mask < (1 << 3); mask++) {
04    for (int i = 0; i < 3; i++)
05        if (mask & (1 << i)) cout << i + 1 << ' ';
06    cout << endl;
07}

判断题:共输出 88 行(含空行 = 空集)。

(1 分)
第 65 题 K2 未作答

01#include <algorithm>
02int a[3] = {1, 2, 3};
03do {
04    for (int i = 0; i < 3; i++) cout << a[i];
05    cout << endl;
06} while (next_permutation(a, a + 3));

判断题:共输出 66 行(3!=63! = 6 个全排列),第一行是 123

(1 分)
第 66 题 K3 未作答

01// 枚举 1~n 中三个数 i<j<k 且 i+j+k==10 的组合
02int n = 10, cnt = 0;
03for (int i = 1; i <= n; i++)
04    for (int j = i + 1; j <= n; j++)
05        for (int k = j + 1; k <= n; k++)
06            if (i + j + k == 10) cnt++;
07cout << cnt;

判断题:输出 44((1,2,7)、(1,3,6)、(1,4,5)、(2,3,5))。

(1 分)
第 67 题 K4 未作答

01// 枚举 n 的所有因数(i <= sqrt(n),每次找到 i 和 n/i 两个)
02int n = 12;
03for (int i = 1; i * i <= n; i++)
04    if (n % i == 0) {
05        cout << i << ' ';
06        if (i * i != n) cout << n / i << ' ';
07    }

判断题:输出的因数个数为 66(1, 2, 3, 4, 6, 12)。

(1 分)
第 68 题 K5 未作答

01// 判断 n 是否是素数:枚举 2 ~ sqrt(n) 看有无因数
02bool isPrime(int n) {
03    if (n < 2) return false;
04    for (int i = 2; i * i <= n; i++)
05        if (n % i == 0) return false;
06    return true;
07}

判断题:isPrime(1) 返回 falseisPrime(2) 返回 true

(1 分)
第 69 题 K6 未作答

01// 判断 n 是否为回文数:反转后与原数相等
02bool isPal(int n) {
03    int rev = 0, t = n;
04    while (t) { rev = rev * 10 + t % 10; t /= 10; }
05    return rev == n;
06}

判断题:isPal(121) 返回 trueisPal(123) 返回 false

(1 分)
第 70 题 K7 未作答

01// 枚举 x 从 1 到 100,验证 x^2 的个位数是否等于 x 的个位数
02int cnt = 0;
03for (int x = 1; x <= 100; x++)
04    if ((x * x) % 10 == x % 10) cnt++;
05cout << cnt;

判断题:输出 4040(个位为 0、1、5、6 的数满足,每类 10 个)。

(1 分)
拾贰

模拟代码

7 QUESTIONS · 2 POINTS EACH
第 71 题 L1 未作答

01// 约瑟夫:n 人围圈,报数到 k 出列(用 bool 数组标记出列)
02int n = 5, k = 2;
03bool out[6] = {false};
04int cnt = 0, pos = 0, remain = n;
05while (remain > 0) {
06    pos = pos % n + 1;              // 下一个人(1..n 循环)
07    if (out[pos]) continue;         // 已出列跳过
08    cnt++;
09    if (cnt == k) {
10        cout << pos << ' ';
11        out[pos] = true;
12        cnt = 0;
13        remain--;
14    }
15}

判断题:输出 2 4 1 5 3

(1 分)
第 72 题 L2 未作答

01// 1~10 报数,报到 3 的倍数输出该数,报到 5 的倍数输出"Fizz"
02for (int i = 1; i <= 10; i++) {
03    if (i % 3 == 0) cout << i << ' ';
04    if (i % 5 == 0) cout << "Fizz ";
05}

判断题:输出中依次出现 3Fizz69Fizz(3 的倍数输出数字,5 的倍数输出 Fizz;5 和 10 只输出 Fizz 不输出数字)。

(1 分)
第 73 题 L3 未作答

01// 2020 年(闰年)各月天数
02int days[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
03// 1 月 1 日到 3 月 1 日的天数:
04int sum = days[1] + days[2];
05cout << sum;

判断题:输出 6060(31 + 29 = 60)。

(1 分)
第 74 题 L4 未作答

01int t = 3661;   // 秒
02int h = t / 3600;
03int m = t % 3600 / 60;
04int s = t % 60;
05cout << h << ' ' << m << ' ' << s;

判断题:输出 1 1 1(1 小时 1 分 1 秒)。

(1 分)
第 75 题 L5 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++) {
04    for (int j = 1; j <= n - i; j++) cout << ' ';
05    for (int j = 1; j <= 2 * i - 1; j++) cout << '*';
06    cout << endl;
07}

输入 n=3n = 3 时输出:

  *
 ***
*****

判断题:这是一个 3 行居中的星号塔(星号数依次 1、3、5)。

(1 分)
第 76 题 L6 未作答

01int n;
02cin >> n;
03for (int i = 1; i <= n; i++) {
04    for (int j = 1; j <= i; j++)
05        cout << j << ' ';
06    cout << endl;
07}

输入 n=3n = 3 时输出:

1 
1 2 
1 2 3 

判断题:第三行输出 1 2 3

(1 分)
第 77 题 L7 未作答

01// 52 张牌轮流发给 4 个人(0~3 号),第 i 张发给 i % 4
02int cnt[4] = {0};
03for (int i = 0; i < 52; i++)
04    cnt[i % 4]++;
05for (int p = 0; p < 4; p++) cout << cnt[p] << ' ';

判断题:输出 13 13 13 13(每人 13 张)。

(1 分)
拾叁

操作序列模拟

6 QUESTIONS · 2 POINTS EACH
第 78 题 M1 未作答

01// 初始 x = 0,执行指令:+3 -2 +5 -1
02int x = 0;
03x += 3;
04x -= 2;
05x += 5;
06x -= 1;
07cout << x;

判断题:上述代码输出 55

(1 分)
第 79 题 M2 未作答

01// 操作序列:push 1、push 2、pop、push 3、pop、pop(每次 pop 输出)
02stack<int> st;
03st.push(1); st.push(2);
04cout << st.top() << ' '; st.pop();
05st.push(3);
06cout << st.top() << ' '; st.pop();
07cout << st.top() << ' '; st.pop();

判断题:上述代码输出 2 3 1

(1 分)
第 80 题 M3 未作答

01// 甲乙轮流取数(每轮各取 1 个),甲先手,共 3 轮
02// 甲取 2、乙取 3、甲取 1、乙取 5、甲取 4、乙取 6
03int A = 0, B = 0;
04for (int r = 1; r <= 3; r++) {
05    int a, b;
06    cin >> a >> b;
07    A += a; B += b;
08}
09cout << A << ' ' << B;

判断题:输入 2 3 1 5 4 6 时输出 7 14

(1 分)
第 81 题 M4 未作答

01// 循环数组:3 个元素 a[0..2],从头走 7 步依次输出
02int a[3] = {1, 2, 3};
03for (int i = 0; i < 7; i++)
04    cout << a[i % 3] << ' ';

判断题:输出 1 2 3 1 2 3 1

(1 分)
第 82 题 M5 未作答

01// 3 盏灯(编号 1~3,初始全开),按编号 2 的灯:状态翻转(开→关)
02bool on[4] = {false, true, true, true};
03on[2] = !on[2];
04for (int i = 1; i <= 3; i++) cout << (on[i] ? '开' : '关') << ' ';

判断题:输出 开 关 开(2 号灯被关掉)。

(1 分)
第 83 题 M6 未作答

01// 细菌繁殖:初始 1 个,每小时翻倍,问 5 小时后数量
02int x = 1;
03for (int h = 1; h <= 5; h++)
04    x *= 2;
05cout << x;

判断题:输出 3232252^5)。

(1 分)
拾肆

完善程序

7 QUESTIONS · 2 POINTS EACH
第 84 题 N1 未作答

01// 输出 1 到 n 的所有偶数
02int n;
03cin >> n;
04for (int i = 1; i <= n; i++)
05    if (______) cout << i << ' ';

横线处应填( )。

(1 分)
第 85 题 N2 未作答

01// 统计 1~n 中偶数的个数
02int n, cnt = 0;
03cin >> n;
04for (int i = 1; i <= n; i++)
05    if (i % 2 == 0) ______;
06cout << cnt;

横线处应填( )。

(1 分)
第 86 题 N3 未作答

01const int MAXN = 100;
02int n, k, pos = 0, cnt = 0, remain;
03bool out[MAXN];   // out[i] = true 表示编号 i 已出列
04cin >> n >> k;
05remain = n;
06
07// 约瑟夫出列:pos 指向当前报数人,出列后把出列标记为 true
08while (remain > 0) {
09    pos = pos % n + 1;
10    if (______) continue;   // 已出列的人跳过
11    cnt++;
12    if (cnt == k) {         // 报到 k:出列
13        cout << pos << ' ';
14        out[pos] = true;
15        cnt = 0;
16        remain--;
17    }
18}

横线处应填( )。

(1 分)
第 87 题 N4 未作答

01// 2020 年(闰年)2 月有 29 天
02int days[13] = {0, 31, ______, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

横线处应填( )。

(1 分)
第 88 题 N5 未作答

01int n = 3;   // 输出 n 行星号塔(n=3:第一行"  *"、第二行" ***"、第三行"*****")
02for (int i = 1; i <= n; i++) {
03    for (int j = 1; j <= n - i; j++) cout << ' ';
04    for (int j = 1; j <= ______; j++) cout << '*';
05    cout << endl;
06}

横线处应填( )。

(1 分)
第 89 题 N6 未作答

01int n = 3;   // 枚举 {1..n} 的子集:mask 的二进制第 i 位为 1 表示选 i+1
02for (int mask = 0; mask < ______; mask++) {
03    for (int i = 0; i < n; i++)
04        if (mask & (1 << i)) cout << i + 1 << ' ';
05    cout << endl;
06}

横线处应填( )。

(1 分)
第 90 题 N7 未作答

01// 细菌每小时翻倍,模拟 h 小时
02int h = 4;      // 模拟 4 小时
03int x = 1;
04for (int i = 1; i <= h; i++)
05    ______;
06cout << x;

横线处应填( )。

(1 分)
拾伍

代码综合应用

5 QUESTIONS · 2 POINTS EACH
第 91 题 O1 未作答

01// 统计 1~100 中"个位数是 3"的数的个数
02int cnt = 0;
03for (int i = 1; i <= 100; i++)
04    if (i % 10 == 3) cnt++;
05cout << cnt;

输出为( )。

(1 分)
第 92 题 O2 未作答

01// 汽车里程:每小时 +60 公里,输出 5 小时的累计里程(每小时一行)
02int d = 0;
03for (int h = 1; h <= 5; h++) {
04    d += 60;
05    cout << h << "小时: " << d << "公里" << endl;
06}

判断题:最后一行的里程是 300300 公里。

(1 分)
第 93 题 O3 未作答

01// 找出 1~50 中因数最多的数(因数个数最大)
02int best = 0, bestN = 0;
03for (int i = 1; i <= 50; i++) {
04    int c = 0;
05    for (int j = 1; j <= i; j++)
06        if (i % j == 0) c++;
07    if (c > best) { best = c; bestN = i; }
08}
09cout << bestN;

判断题:输出 4848(1~50 中 48 的因数最多)。

(1 分)
第 94 题 O4 未作答

01int n;
02cin >> n;
03for (int i = n; i >= 1; i--) {
04    for (int j = 1; j <= i; j++)
05        cout << '*';
06    cout << endl;
07}

输入 n=4n = 4 时输出(倒三角,星号数依次 4、3、2、1):

****
***
**
*

判断题:上述输出是 4 行倒三角。

(1 分)
第 95 题 O5 未作答

01// 模拟翻倍 + 枚举判断:1 到 100 里,翻倍 3 次(乘 8)后超过 500 的最小数
02int ans = 0;
03for (int i = 1; i <= 100; i++) {
04    int t = i;
05    for (int k = 1; k <= 3; k++) t *= 2;
06    if (t > 500) { ans = i; break; }
07}
08cout << ans;

输出为( )。

(1 分)
拾陆

代码易错

5 QUESTIONS · 2 POINTS EACH
第 96 题 P1 未作答

01// 想输出 1 到 10,却写成:
02for (int i = 1; i < 10; i++)
03    cout << i << ' ';

判断题:i < 10 会漏掉 10(只输出 1~9)——应写 i <= 10

(1 分)
第 97 题 P2 未作答

01// 多组数据:每组统计偶数的个数,但 cnt 没有在每组开始时清零
02int q, n, cnt = 0;
03cin >> q;
04while (q--) {
05    cin >> n;
06    // 忘记 cnt = 0;
07    for (int i = 1; i <= n; i++)
08        if (i % 2 == 0) cnt++;
09    cout << cnt << endl;
10}

判断题:cnt 会跨组累加——第二组及以后的结果被上组污染。

(1 分)
第 98 题 P3 未作答

01// 想模拟计数到 10,但忘记更新循环变量:
02int i = 1;
03while (i <= 10) {
04    cout << i << ' ';
05    // 忘记 i++;
06}

判断题:i 永远是 1,循环条件永远为真——死循环(无限输出 1)。

(1 分)
第 99 题 P4 未作答

01// 输出 1 到 n,要求数字之间用空格隔开
02for (int i = 1; i <= n; i++)
03    cout << i << (i == n ? '\n' : ' ');

判断题:这样写保证最后一个数字后是换行而不是多余空格。

(1 分)
第 100 题 P5 未作答

下列说法错误的是( )。

(1 分)