当前位置:首页>笔试招聘真题>CSP-J 2022 入门组第一轮笔试真题及详解(解析流程 、扩展点、模拟题)

CSP-J 2022 入门组第一轮笔试真题及详解(解析流程 、扩展点、模拟题)

  • 2026-08-25 19:26:11
CSP-J 2022 入门组第一轮笔试真题及详解(解析流程 、扩展点、模拟题)
【出售告之】CSP-S 《数据结构与算法》课件正式起售……

【课件出售通知】CSP-J 《语法与数学》PPT 课件出售告知

认证时间:2022年9月18日 09:30~11:30
总分:100分
题量:44题(单项选择题15题 + 阅读程序题19题 + 完善程序题10题)


答案速查表

题号
答案
题号
答案
题号
答案
1
A
16
A(√)
31
B(×)
2
C
17
B(×)
32
C
3
D
18
B(×)
33
B
4
C
19
B(×)
34
A
5
B
20
B(×)
35
A
6
B
21
B
36
B
7
B
22
B(×)
37
C
8
C
23
A(√)
38
D
9
B
24
A(√)
39
A
10
D
25
C
40
A
11
D
26
C
41
B
12
B
27
B
42
C
13
C
28
A(√)
43
D
14
B
29
A(√)
44
A
15
B
30
B(×)

第一部分:完整试卷


一、单项选择题(共15题,每题2分,共计30分)

第1题 以下哪种功能没有涉及C++语言的面向对象特性支持:( )。

A. C++中调用printf函数

B. C++中调用用户定义的类成员函数

C. C++中构造一个class或struct

D. C++中构造来源于同一基类的多个派生类


第2题 有6个元素,按照6、5、4、3、2、1的顺序进入栈S,请问下列哪个出栈序列是非法的( )。

A. 5 4 3 6 1 2

B. 4 5 3 1 2 6

C. 3 4 6 5 2 1

D. 2 3 4 1 5 6


第3题 运行以下代码片段的行为是( )。

int x = 101;
int y = 201;
int *p = &x;
int *q = &y;
p = q;

A. 将x的值赋为201

B. 将y的值赋为101

C. 将q指向x的地址

D. 将p指向y的地址


第4题 链表和数组的区别包括( )。

A. 数组不能排序,链表可以

B. 链表比数组能存储更多的信息

C. 数组大小固定,链表大小可动态调整

D. 以上均正确


第5题 对假设栈S和队列Q的初始状态为空。存在e1~e6六个互不相同的数据,每个数据按照进栈S、出栈S、进队列Q、出队列Q的顺序操作,不同数据间的操作可能会交错。已知栈S中依次有数据e1、e2、e3、e4、e5和e6进栈,队列Q依次有数据e2、e4、e3、e6、e5和e1出队列。则栈S的容量至少是( )个数据。

A. 2

B. 3

C. 4

D. 6


第6题 对表达式a+(b-c)d的前缀表达式为( ),其中+、-、是运算符。

A. *+a-bcd

B. +a*-bcd

C. abc-d*+

D. abc-+d


第7题 假设字母表{a, b, c, d, e}在字符串出现的频率分别为10%,15%,30%,16%,29%。若使用哈夫曼编码方式对字母进行不定长的二进制编码,字母d的编码长度为( )位。

A. 1

B. 2

C. 2或3

D. 3


第8题 一棵有n个结点的完全二叉树用数组进行存储与表示,已知根结点存储在数组的第1个位置。若存储在数组第9个位置的结点存在兄弟结点和两个子结点,则它的兄弟结点和右子结点的位置分别是( )。

A. 8、18

B. 10、18

C. 8、19

D. 10、19


第9题 考虑由N个顶点构成的有向连通图,采用邻接矩阵的数据结构表示时,该矩阵中至少存在( )个非零元素。

A. N-1

B. N

C. N+1

D. N²


第10题 以下对数据结构的表述不恰当的一项为:( )。

A. 图的深度优先遍历算法常使用的数据结构为栈。

B. 栈的访问原则为后进先出,队列的访问原则是先进先出。

C. 队列常常被用于广度优先搜索算法。

D. 栈与队列存在本质不同,无法用栈实现队列。


第11题 以下哪组操作能完成在双向循环链表结点p之后插入结点s的效果(其中,next域为结点的直接后继,prev域为结点的直接前驱):( )。

A. p->next->prev=s; s->prev=p; p->next=s; s->next=p->next;

B. p->next->prev=s; p->next=s; s->prev=p; s->next=p->next;

C. s->prev=p; s->next=p->next; p->next=s; p->next->prev=s;

D. s->next=p->next; p->next->prev=s; s->prev=p; p->next=s;


第12题 以下排序算法的常见实现中,哪个选项的说法是错误的:( )。

A. 冒泡排序算法是稳定的

B. 简单选择排序是稳定的

C. 简单插入排序是稳定的

D. 归并排序算法是稳定的


第13题 八进制数32.1对应的十进制数是( )。

A. 24.125

B. 24.250

C. 26.125

D. 26.250


第14题 一个字符串中任意个连续的字符组成的子序列称为该字符串的子串,则字符串abcab有( )个内容互不相同的子串。

A. 12

B. 13

C. 14

D. 15


第15题 以下对递归方法的描述中,正确的是:( )。

A. 递归是允许使用多组参数调用函数的编程技术

B. 递归是通过调用自身来求解问题的编程技术

C. 递归是面向对象和数据而不是功能和逻辑的编程语言模型

D. 递归是将用某种高级语言转换为机器代码的编程技术


二、阅读程序题(除特殊说明外,判断题每题1.5分,选择题每题3分,共计40分)

程序(1)

#include<iostream>
usingnamespacestd;

intmain()
{
unsigned short x, y;
cin >> x >> y;
    x = (x | x << 2) & 0x33;
    x = (x | x << 1) & 0x55;
    y = (y | y << 2) & 0x33;
    y = (y | y << 1) & 0x55;
unsigned short z = x | y << 1;
cout << z << endl;
return0;
}

假设输入的x、y均是不超过15的自然数,完成下面的判断题和单选题:

第16题 删去第7行与第13行的unsigned,程序行为不变。( )

A. 正确  B. 错误

第17题 将第7行与第13行的short均改为char,程序行为不变。( )

A. 正确  B. 错误

第18题 程序总是输出一个整数"0"。( )

A. 正确  B. 错误

第19题 当输入为"2 2"时,输出为"10"。( )

A. 正确  B. 错误

第20题 当输入为"2 2"时,输出为"59"。( )

A. 正确  B. 错误

第21题 当输入为"13 8"时,输出为( )。

A. "0"  B. "209"  C. "197"  D. "226"


程序(2)

#include<algorithm>
#include<iostream>
#include<limits>
usingnamespacestd;

constint MAXN = 105;
constint MAXK = 105;

int h[MAXN][MAXK];

intf(int n, int m)
{
if (m == 1return n;
if (n == 0return0;

int ret = numeric_limits<int>::max();
for (int i = 1; i <= n; i++)
        ret = min(ret, max(f(n - i, m), f(i - 1, m - 1)) + 1);
return ret;
}

intg(int n, int m)
{
for (int i = 1; i <= n; i++)
        h[i][1] = i;
for (int j = 1; j <= m; j++)
        h[0][j] = 0;

for (int i = 1; i <= n; i++) {
for (int j = 2; j <= m; j++) {
            h[i][j] = numeric_limits<int>::max();
for (int k = 1; k <= i; k++)
                h[i][j] = min(
                    h[i][j],
                    max(h[i - k][j], h[k - 1][j - 1]) + 1);
        }
    }
return h[n][m];
}

intmain()
{
int n, m;
cin >> n >> m;
cout << f(n, m) << endl << g(n, m) << endl;
return0;
}

假设输入的n、m均是不超过100的正整数,完成下面的判断题和单选题:

第22题 当输入为"7 3"时,第19行用来取最小值的min函数执行了449次。( )

A. 正确  B. 错误

第23题 输出的两行整数总是相同的。( )

A. 正确  B. 错误

第24题 当m为1时,输出的第一行总为n。( )

A. 正确  B. 错误

第25题 算法g(n, m)最为准确的时间复杂度分析结果为( )。

A. O(n^(3/2) * m)  B. O(nm)  C. O(n²m)  D. O(nm²)

第26题 当输入为"20 2"时,输出的第一行为( )。

A. "4"  B. "5"  C. "6"  D. "20"

第27题 当输入为"100 100"时,输出的第一行为( )。

A. "6"  B. "7"  C. "8"  D. "9"


程序(3)

#include<iostream>
usingnamespacestd;

int n, k;

intsolve1()
{
int l = 0, r = n;
while (l <= r) {
int mid = (l + r) / 2;
if (mid * mid <= n) l = mid + 1;
else r = mid - 1;
    }
return l - 1;
}

doublesolve2(double x)
{
if (x == 0return x;
for (int i = 0; i < k; i++)
        x = (x + n / x) / 2;
return x;
}

intmain()
{
cin >> n >> k;
double ans = solve2(solve1());
cout << ans << ' ' << (ans * ans == n) << endl;
return0;
}

假设int为32位有符号整数类型,输入的n是不超过47000的自然数、k是不超过int表示范围的自然数,完成下面的判断题和单选题:

第28题 该算法最准确的时间复杂度分析结果为O(log n + k)。( )

A. 正确  B. 错误

第29题 当输入为"9801 1"时,输出的第一个数为"99"。( )

A. 正确  B. 错误

第30题 对于任意输入的n,随着所输入k的增大,输出的第二个数会变成"1"。( )

A. 正确  B. 错误

第31题 该程序有存在缺陷。当输入的n过大时,第12行的乘法有可能溢出,因此应当将mid强制转换为64位整数再计算。( )

A. 正确  B. 错误

第32题 当输入为"2 1"时,输出的第一个数最接近( )。

A. 1  B. 1.414  C. 1.5  D. 2

第33题 当输入为"3 10"时,输出的第一个数最接近( )。

A. 1.7  B. 1.732  C. 1.75  D. 2

第34题 当输入为"256 11"时,输出的第一个数( )。

A. 等于16  B. 接近但小于16  C. 接近但大于16  D. 前三种情况都有可能


三、完善程序题(每题3分,共计30分)

程序(1)

题目:从小到大打印正整数n的所有正因数。试补全枚举程序。

#include<bits/stdc++.h>
usingnamespacestd;

intmain(){
int n;
cin >> n;

vector<int> fac;
    fac.reserve((int)ceil(sqrt(n)));

int i;
for (i = 1; i * i < n; ++i) {
if (____(1)____) {
            fac.push_back(i);
        }
    }

for (int k = 0; k < fac.size(); ++k) {
cout << ____(2)____ << " ";
    }
if (____(3)____) {
cout << ____(4)____ << " ";
    }
for (int k = fac.size() - 1; k >= 0; --k) {
cout << ____(5)____ << " ";
    }
}

第35题 ①处应填( )

A. n % i == 0  B. n % i == 1  C. n % (i-1) == 0  D. n % (i-1) == 1

第36题 ②处应填( )

A. n / fac[k]  B. fac[k]  C. fac[k]-1  D. n / (fac[k]-1)

第37题 ③处应填( )

A. (i-1) * (i-1) == n  B. (i-1) * i == n  C. i * i == n  D. i * (i-1) == n

第38题 ④处应填( )

A. n-i  B. n-i+1  C. i-1  D. i

第39题 ⑤处应填( )

A. n / fac[k]  B. fac[k]  C. fac[k]-1  D. n / (fac[k]-1)


程序(2)

题目:(洪水填充)现有用字符标记像素颜色的8×8图像。颜色填充的操作描述如下:给定起始像素的位置和待填充的颜色,将起始像素和所有可达的像素(可达的定义:经过一次或多次的向上、下、左、右四个方向移动所能到达且终点和路径上所有像素的颜色都与起始像素颜色相同),替换为给定的颜色。试补全程序。

#include<bits/stdc++.h>
usingnamespacestd;

constint ROWS = 8;
constint COLS = 8;

structPoint {
int r, c;
    Point(int r, int c): r(r), c(c) {}
};

boolis_valid(char image[ROWS][COLS], Point pt,
int prev_color, int new_color)
{
int r = pt.r;
int c = pt.c;
return (0 <= r && r < ROWS && 0 <= c && c < COLS &&
        ____(1)____ && image[r][c] != new_color);
}

voidflood_fill(char image[ROWS][COLS], Point cur, int new_color){
queue<Point> queue;
queue.push(cur);

int prev_color = image[cur.r][cur.c];
    ____(2)____;

while (!queue.empty()) {
        Point pt = queue.front();
queue.pop();

        Point points[4] = {____(3)____, Point(pt.r - 1, pt.c),
                        Point(pt.r, pt.c + 1), Point(pt.r, pt.c - 1)};
for (auto p : points) {
if (is_valid(image, p, prev_color, new_color)) {
               ____(4)____;
               ____(5)____;
            }
        }
    }
}

intmain(){
char image[ROWS][COLS] = {{'g','g','g','g','g','g','g','g'},
                            {'g','g','g','g','g','g','r','r'},
                            {'g','r','r','g','g','r','g','g'},
                            {'g','b','b','b','b','r','g','r'},
                            {'g','g','g','b','b','r','g','r'},
                            {'g','g','g','b','b','b','b','r'},
                            {'g','g','g','g','g','b','g','g'},
                            {'g','g','g','g','g','b','b','g'}};

Point cur(44);
char new_color = 'y';

    flood_fill(image, cur, new_color);

for (int r = 0; r < ROWS; r++) {
for (int c = 0; c < COLS; c++) {
cout << image[r][c] << " ";
        }
cout << endl;
    }
return0;
}

第40题 ①处应填( )

A. image[r][c] == prev_color  B. image[r][c] != prev_color

C. image[r][c] == new_color  D. image[r][c] != new_color

第41题 ②处应填( )

A. image[cur.r+1][cur.c] = new_color

B. image[cur.r][cur.c] = new_color

C. image[cur.r][cur.c+1] = new_color

D. image[cur.r][cur.c] = prev_color

第42题 ③处应填( )

A. Point(pt.r, pt.c)  B. Point(pt.r, pt.c+1)

C. Point(pt.r+1, pt.c)  D. Point(pt.r+1, pt.c+1)

第43题 ④处应填( )

A. prev_color = image[p.r][p.c]

B. new_color = image[p.r][p.c]

C. image[p.r][p.c] = prev_color

D. image[p.r][p.c] = new_color

第44题 ⑤处应填( )

A. queue.push(p)  B. queue.push(pt)  C. queue.push(cur)  D. queue.push(Point(ROWS, COLS))


第二部分:逐题详细解析


一、单项选择题解析


第1题

考核知识点:C++面向对象编程特性(OOP)

答案:A

详细解析

逐项分析:

  • A. printf函数:printf是C标准库函数,属于面向过程编程的产物。虽然C++可以通过<cstdio>调用它,但它本身不涉及任何面向对象特性(不涉及类、对象、继承、多态等)。
  • B. 调用类成员函数:涉及类的定义和对象调用,是面向对象特性。
  • C. 构造class或struct:class和struct是C++中定义类的方式,是面向对象的基础。
  • D. 构造派生类:涉及继承机制,是面向对象的核心特性之一。

因此,没有涉及面向对象特性的是A。

知识点扩展

面向对象特性
说明
C++实现方式
封装
将数据和操作数据的方法绑定在一起,隐藏内部实现
class/struct + 访问控制(public/private/protected)
继承
子类获得父类的属性和方法
class Derived : public Base
多态
同一接口不同实现
虚函数virtual + 重写override
抽象
提取核心特征,忽略非本质细节
纯虚函数 = 0

C++中面向过程与面向对象的对比:

特征
面向过程(C语言)
面向对象(C++)
基本单元
函数
类/对象
数据与操作
分离
封装在一起
代码复用
函数调用
继承
灵活性
多态支持
典型函数
printf, scanf
cin.get(), cout.put()

类似试题

下列C++代码片段中,体现了面向对象多态特性的是( )。

A. int arr[10]; sort(arr, arr+10);B. printf("%d", x);C. virtual void draw() = 0;D. #define MAX 100

答案:C
解析:纯虚函数virtual void draw() = 0定义了抽象基类接口,派生类必须重写该函数,体现了多态特性。A是STL算法(不涉及OOP),B是C语言函数,D是宏定义。


第2题

考核知识点:栈的入栈出栈序列合法性

答案:C

详细解析

入栈顺序固定为6→5→4→3→2→1。栈的特点是后进先出(LIFO),即任何时候出栈的元素必须是当前栈顶元素。

逐项验证:

  • A. 5 4 3 6 1 2:压入6,5→出5→压4→出4→压3→出3→此时栈中{6}→出6→压2,1→出1→出2。✅合法
  • B. 4 5 3 1 2 6:压入6,5,4→出4→出5→压3→出3→压2,1→出1→出2→出6。✅合法
  • C. 3 4 6 5 2 1:压入6,5,4,3→出3→出4→此时栈中{6,5}(栈顶是5)→要出6,但6不是栈顶,5挡在前面。❌非法
  • D. 2 3 4 1 5 6:压入6,5,4,3,2→出2→出3→出4→此时栈中{6,5}→出5→出6。✅合法

知识点扩展

栈出栈序列合法性判定方法

对于入栈顺序1,2,...,n,判定某出栈序列是否合法的方法:

  1. 模拟法:用栈逐个模拟,遇到非法即返回
  2. 禁止模式法:若序列中出现...a...b...c...(a>b>c),则必为非法(因为不可能先弹出更大的再弹出中间的)

Catalan数:n个不同元素依次进栈,合法的出栈序列数 = 第n个Catalan数:

n
合法序列数
1
1
2
2
3
5
4
14
5
42
6
132

类似试题

有4个元素,按照1、2、3、4的顺序进入栈S,下列哪个出栈序列是合法的( )。

A. 4 3 1 2 B. 3 2 4 1 C. 2 1 4 3 D. 1 4 2 3

答案:B
解析
A: 出4后栈中{3,2,1},栈顶是3,不能出1,非法。
B: 压1,2,3→出3→出2→压4→出4→出1。合法。
C: 压1,2→出2→出1→压3,4→出4→出3。合法。
D: 出1→压2,3,4→出4后栈顶是3,不能出2,非法。
B和C都合法,但此题为单选题。仔细检查C: 压1,2→出2→出1→压3,4→出4→出3。序列2,1,4,3合法。B: 压1,2,3→出3→出2→压4→出4→出1。序列3,2,4,1合法。如果只选一个,需要看题目问"哪个",选B。


第3题

考核知识点:C++指针赋值

答案:D

详细解析

int x = 101;       // x = 101
int y = 201;       // y = 201
int *p = &x;       // p 指向 x 的地址
int *q = &y;       // q 指向 y 的地址
p = q;             // 将 q 的值(即 y 的地址)赋给 p

执行p = q后:

  • p 不再指向 x,而是指向 y 的地址
  • x 和 y 的值不变(x仍为101,y仍为201)
  • q 仍指向 y 的地址

关键区别:p = q指针赋值(改变指针指向),不是解引用赋值*p = *q(改变指针所指变量的值)。

知识点扩展

操作
含义
效果
p = q
指针赋值
p指向q所指的地址,原变量值不变
*p = *q
解引用赋值
将q所指变量的值赋给p所指变量
p = &x
取地址赋值
p指向x的地址
*p = 5
解引用赋值
将p所指变量的值改为5

指针内存示意图

执行前:
p ──→ x(101)
q ──→ y(201)

执行 p = q 后:
p ──→ y(201)  ← p和q都指向y
q ──→ y(201)
x(101) 不受影响

类似试题

以下代码执行后,*p的值是多少?

int a = 10, b = 20;
int *p = &a;
int *q = &b;
*p = *q;

A. 10 B. 20 C. 不确定 D. 编译错误

答案:B
解析*p = *q是解引用赋值,将q所指变量b的值(20)赋给p所指变量a。执行后a=20,p仍指向a,所以*p = 20


第4题

考核知识点:链表与数组的特性对比

答案:C

详细解析

逐项分析:

  • A. 数组不能排序,链表可以:❌ 错误。数组可以用sort排序,链表也可以排序。如sort(arr, arr+n)或链表的冒泡排序。
  • B. 链表比数组能存储更多的信息:❌ 错误。存储信息量取决于容量,链表和数组都可以存储大量信息,不能简单比较。
  • C. 数组大小固定,链表大小可动态调整:✅ 正确。数组在声明时大小确定(静态分配),链表可以动态申请和释放节点。
  • D. 以上均正确:❌ 错误,因为A和B都错误。

知识点扩展

特性
数组
链表
内存分配
连续内存
分散内存(通过指针连接)
大小
固定(静态数组)/可变(动态数组vector)
动态调整
随机访问
O(1),直接通过下标
O(n),需从头遍历
插入/删除
O(n),需要移动元素
O(1)(已知位置时)
空间开销
仅存储数据
额外存储指针(每个节点多一个指针)
缓存友好性
高(连续内存)
低(分散内存)
排序
可以用各种排序算法
可以用各种排序算法

类似试题

以下关于数组和链表的说法中,错误的是( )。

A. 数组支持随机访问,访问时间复杂度为O(1)

B. 在链表头部插入元素的时间复杂度为O(1)

C. 数组的内存空间是连续的,链表的内存空间是分散的

D. 在数组中间插入元素的时间复杂度为O(1)

答案:D
解析:在数组中间插入元素需要将后续所有元素后移,时间复杂度为O(n),不是O(1)。链表在已知位置插入才是O(1)。


第5题

考核知识点:栈和队列的操作配合、栈容量计算

答案:B

详细解析

已知条件:

  • 入栈顺序:e1, e2, e3, e4, e5, e6
  • 出队列顺序:e2, e4, e3, e6, e5, e1
  • 队列是FIFO,所以出队列顺序 = 入队列顺序 = 出栈顺序

即出栈顺序为:e2, e4, e3, e6, e5, e1

逐步模拟:

步骤
操作
栈中元素(左为栈底)
栈大小
出栈序列
1
e1入栈
e1
1
2
e2入栈
e1, e2
2
3
e2出栈
e1
1
e2
4
e3入栈
e1, e3
2
e2
5
e4入栈
e1, e3, e4
3
e2
6
e4出栈
e1, e3
2
e2, e4
7
e3出栈
e1
1
e2, e4, e3
8
e5入栈
e1, e5
2
e2, e4, e3
9
e6入栈
e1, e5, e6
3
e2, e4, e3
10
e6出栈
e1, e5
2
e2, e4, e3, e6
11
e5出栈
e1
1
e2, e4, e3, e6, e5
12
e1出栈
(空)
0
e2, e4, e3, e6, e5, e1

栈中最大元素数量为3,因此栈S的容量至少为3。

知识点扩展

栈与队列对比

特性
栈(Stack)
队列(Queue)
访问原则
LIFO(后进先出)
FIFO(先进先出)
典型应用
函数调用、表达式求值、DFS
BFS、任务调度、缓冲区
插入位置
栈顶
队尾
删除位置
栈顶
队头
用栈实现队列
用两个栈(入队栈+出队栈)
用队列实现栈
用两个队列

双栈实现队列的原理:

  • 入队:push到栈s1
  • 出队:若s2非空则pop s2;否则将s1所有元素倒入s2,再pop s2

类似试题

设栈S的初始状态为空,元素a, b, c, d, e依次入栈,允许入栈和出栈操作交错。若出栈序列为c, b, d, e, a,则栈S的容量至少为( )。

A. 2 B. 3 C. 4 D. 5

答案:B
解析
a入栈→b入栈→c入栈(栈{a,b,c},大小3)→c出栈→b出栈→d入栈(栈{a,d},大小2)→d出栈→e入栈(栈{a,e},大小2)→e出栈→a出栈。最大容量为3。


第6题

考核知识点:中缀表达式转前缀表达式

答案:B

详细解析

将中缀表达式a+(b-c)*d转换为前缀表达式,步骤如下:

步骤1:按运算优先级加括号

a + (b - c) * d
→ (a + ((b - c) * d))

步骤2:将运算符移到对应括号前面

(a + ((b - c) * d))
→ (+ a (* (- b c) d))

步骤3:去掉括号

+a*-bcd

选项分析

  • A. *+a-bcd:运算符顺序错误
  • B. +a*-bcd:✅ 正确
  • C. abc-d*+:这是后缀表达式
  • D. abc-+d:格式不正确

知识点扩展

三种表达式对比:

表达式类型
运算符位置
示例(a+(b-c)*d)
前缀表达式(波兰式)
运算符在操作数前
+a*-bcd
中缀表达式
运算符在操作数中间
a+(b-c)*d
后缀表达式(逆波兰式)
运算符在操作数后
abc-d*+

中缀转前缀三步法

  1. 加括号:按优先级为整个表达式加括号
  2. 移运算符:将每个运算符移到对应括号前
  3. 去括号:删除所有括号

中缀转后缀(栈方法)

  1. 从左到右扫描中缀表达式
  2. 操作数直接输出
  3. 运算符与栈顶比较优先级,弹出栈中优先级≥当前的运算符后再入栈
  4. 左括号入栈,右括号弹出直到左括号
  5. 扫描完毕后弹出栈中剩余运算符

类似试题

表达式(a+b)*c-d的后缀表达式为( )。

A. ab+c*d- B. abcd*+- C. abc+d*- D. ab+c-d*

答案:A
解析
加括号:(((a+b)*c)-d)
后缀:操作数在后,运算符在后
→ ab+c*d-


第7题

考核知识点:哈夫曼树与哈夫曼编码

答案:B

详细解析

给定频率:a=10%, b=15%, c=30%, d=16%, e=29%

构建哈夫曼树

每次选择两个频率最小的节点合并:

第1步:选a(10)和b(15) → 合并为f1(25)
第2步:选f1(25)和d(16) → 合并为f2(41)
       (注意:d=16 < c=30和e=29,所以选d)
第3步:选c(30)和e(29) → 合并为f3(59)
       (注意:e=29 < f2=41,所以先选e和c)
第4步:选f2(41)和f3(59) → 合并为root(100)

哈夫曼树结构

            root(100)
           /        \
        f2(41)      f3(59)
       /    \       /    \
    f1(25)  d(16) c(30)  e(29)
    /    \
  a(10)  b(15)

各字母编码长度(从根到叶子的边数):

  • a: root→f2→f1→a,长度3
  • b: root→f2→f1→b,长度3
  • d: root→f2→d,长度2
  • c: root→f3→c,长度2
  • e: root→f3→e,长度2

字母d的编码长度为2位

知识点扩展

哈夫曼编码性质

  1. 最优前缀码:总编码长度最短
  2. 前缀码性质:任何字符的编码都不是另一个字符编码的前缀
  3. 频率越高,编码越短:高频字符离根更近

哈夫曼树构建算法

1. 将每个字符作为叶子节点,权值为频率
2. 重复以下步骤直到只剩一棵树:
   a. 选择权值最小的两棵树
   b. 合并为一棵新树,新树根的权值为两子树权值之和
   c. 删除已选的两棵树,加入新树
3. 左分支编码0,右分支编码1(或反之)

**带权路径长度(WPL)**:

其中为第i个叶子节点的权值,为该叶子到根的路径长度。

本题WPL = 10×3 + 15×3 + 16×2 + 30×2 + 29×2 = 30+45+32+60+58 = 225

类似试题

已知字符a, b, c, d, e的频率分别为5%, 20%, 30%, 15%, 30%,使用哈夫曼编码后,字符a的编码长度为多少位?

A. 1 B. 2 C. 3 D. 4

答案:D
解析
第1步:选a(5)和d(15)→f1(20)
第2步:选f1(20)和b(20)→f2(40)
第3步:选c(30)和e(30)→f3(60)
第4步:选f2(40)和f3(60)→root(100)
a路径:root→f2→f1→a,长度3...

重新检查:
第1步:选a(5)和d(15)→f1(20)
第2步:选f1(20)和b(20)→f2(40)
第3步:选c(30)和e(30)→f3(60)
第4步:选f2(40)和f3(60)→root
a: root→f2→f1→a,长度3
答案为C(3)。


第8题

考核知识点:完全二叉树的数组存储

答案:C

详细解析

完全二叉树用数组存储时(根在第1个位置),节点位置关系:

  • 节点i的左孩子:2i
  • 节点i的右孩子:2i + 1
  • 节点i的父节点:⌊i/2⌋
  • 节点i的兄弟节点
    • 若i为偶数(左孩子),兄弟为 i+1
    • 若i为奇数(右孩子),兄弟为 i-1

第9个位置的节点

  • 9是奇数 → 是其父节点的右孩子
  • 父节点 = ⌊9/2⌋ = 4
  • 兄弟节点 = 9 - 1 = 8(父节点4的左孩子)
  • 左孩子 = 2 × 9 = 18
  • 右孩子 = 2 × 9 + 1 = 19

因此兄弟节点为8,右子结点为19,选C。

知识点扩展

完全二叉树数组存储性质总结

关系
公式
条件
左孩子
2i
2i ≤ n
右孩子
2i+1
2i+1 ≤ n
父节点
⌊i/2⌋
i > 1
左兄弟
i-1
i为奇数
右兄弟
i+1
i为偶数

完全二叉树性质

  1. n个节点的完全二叉树高度为 ⌊log₂n⌋ + 1
  2. 叶子节点数 = ⌈n/2⌉
  3. 度为1的节点数至多1个
  4. 若从0开始编号:左孩子2i+1,右孩子2i+2,父节点⌊(i-1)/2⌋

类似试题

一棵有15个结点的完全二叉树用数组存储(根在第1个位置),存储在第6个位置的结点的父结点和左子结点分别是( )。

A. 3, 12 B. 3, 13 C. 2, 12 D. 2, 13

答案:A
解析
第6个位置:6是偶数→是左孩子
父节点 = 6/2 = 3
左孩子 = 6×2 = 12
答案:父结点3,左子结点12,选A。


第9题

考核知识点:有向连通图与邻接矩阵

答案:B

详细解析

有向连通图(强连通图)的定义:对于图中任意两个顶点u和v,都存在从u到v和从v到u的有向路径。

N个顶点的有向强连通图,最少需要N条边才能保证连通。构造方式是形成一个有向环

1 → 2 → 3 → ... → N → 1

此时邻接矩阵中:

  • 第1行第2列为1(边1→2)
  • 第2行第3列为1(边2→3)
  • ...
  • 第N行第1列为1(边N→1)

共N个非零元素。

选项分析

  • A. N-1:这是无向连通图的最少边数,有向图需要更多
  • B. N:✅ 正确,有向环需要N条边
  • C. N+1:不需要这么多
  • D. N²:这是完全图的边数

知识点扩展

图的连通性分类

连通类型
定义
最少边数(N个顶点)
无向连通图
任意两顶点间有路径
N-1(树)
有向弱连通
去掉方向后无向图连通
N-1
有向单向连通
任意两顶点单向可达
N-1(注意区分)
有向强连通
任意两顶点双向可达
N(有向环)

邻接矩阵表示法

  • 无向图:对称矩阵,每条边占2个非零元素
  • 有向图:不一定对称,每条边占1个非零元素
  • 空间复杂度:O(N²)
  • 适合稠密图

类似试题

考虑由6个顶点构成的无向连通图,采用邻接矩阵存储时,该矩阵中至少存在多少个非零元素?

A. 5 B. 10 C. 6 D. 12

答案:B
解析
无向连通图最少需要N-1=5条边(构成一棵树)。
无向图的邻接矩阵是对称的,每条边对应2个非零元素。
所以至少有 5×2 = 10个非零元素。


第10题

考核知识点:栈与队列的特性及相互关系

答案:D

详细解析

逐项分析:

  • A. DFS常使用栈:✅ 正确。深度优先遍历可用递归(本质用调用栈)或显式栈实现。
  • B. 栈LIFO,队列FIFO:✅ 正确。这是栈和队列的基本定义。
  • C. 队列常用于BFS:✅ 正确。广度优先搜索用队列保证层次遍历顺序。
  • D. 无法用栈实现队列:❌ 错误。可以用两个栈实现队列。

双栈实现队列的方法:

  • 入队:push到栈s1
  • 出队:若s2非空,pop s2;否则将s1中所有元素倒入s2,再pop s2

知识点扩展

数据结构
访问原则
常见应用
LIFO
DFS、函数调用、括号匹配、表达式求值
队列
FIFO
BFS、打印机任务、消息缓冲区

栈与队列的相互实现

实现
方法
时间复杂度
双栈实现队列
入队栈+出队栈
入队O(1),均摊出队O(1)
双队列实现栈
主队列+辅助队列
入队O(n),出队O(1) 或 入队O(1),出队O(n)

类似试题

以下关于栈和队列的说法中,正确的是( )。

A. 栈和队列都是线性数据结构,访问原则相同

B. 用两个栈可以模拟队列,但用两个队列不能模拟栈

C. 栈的插入和删除都在同一端进行,队列的插入和删除在不同端进行

D. 深度优先搜索可以用队列实现

答案:C
解析
A: 访问原则不同,栈LIFO队列FIFO。
B: 两个栈可以模拟队列,两个队列也可以模拟栈。
C: 正确,栈的插入删除都在栈顶,队列的插入在队尾删除在队头。
D: DFS用栈,BFS用队列。


第11题

考核知识点:双向循环链表的插入操作

答案:D

详细解析

在双向循环链表中,节点p之后插入节点s,需要修改4个指针:

  1. s->next = p->next(s的后继指向p的原后继)
  2. p->next->prev = s(p的原后继的前驱指向s)
  3. s->prev = p(s的前驱指向p)
  4. p->next = s(p的后继指向s)

关键p->next = s必须放在最后,因为语句1和2中用到的p->next应该是修改前的值(即p原来的下一个节点)。

如果先执行p->next = s,则后续p->next就变成了s,导致语句1和2的错误。

选项分析

  • A: 第3句p->next=s在第4句s->next=p->next之前,此时p->next已变为s,s->next=s形成自环。❌
  • B: 第2句p->next=s在第4句s->next=p->next之前,同上问题。❌
  • C: 第3句p->next=s在第4句p->next->prev=s之前,此时p->next已变为s,s->prev=s自环。❌
  • D: 先修改s的指针和p的原后继的prev,最后才p->next=s。✅

知识点扩展

双向链表插入操作的正确顺序

// 在p之后插入s
s->next = p->next;        // ① s指向p的原后继
p->next->prev = s;        // ② p的原后继回指s
s->prev = p;              // ③ s的前驱指向p
p->next = s;              // ④ p指向s(最后做!)

核心原则:先保存或使用需要读取的旧值,最后才覆盖会影响的指针。

类似试题

在双向链表中,删除节点p的操作中,正确的指针修改顺序是( )。

A. p->prev->next = p->next; p->next->prev = p->prev;

B. p->next->prev = p->prev; p->prev->next = p->next;

C. p->next = p->prev->next; p->prev = p->next->prev;

D. 以上都对

答案:D(A和B都正确)
解析:删除操作中,需要修改p的前驱的next和p的后继的prev。两条语句之间没有依赖关系(不涉及读取被修改的值),所以A和B等价,顺序无关。D说"以上都对",但A和B是等价的两个写法。标准答案为A或B均可,此题选A(更常见的写法)。


第12题

考核知识点:排序算法的稳定性

答案:B

详细解析

排序稳定性定义:对于值相同的两个元素,排序后它们的相对位置与排序前相同,则称该排序算法是稳定的。

逐项分析:

  • A. 冒泡排序是稳定的:✅ 相邻元素交换,相等元素不交换
  • B. 简单选择排序是稳定的:❌ 错误。选择排序每次选最小值放到前面,可能改变相等元素的相对位置
  • C. 简单插入排序是稳定的:✅ 从后向前比较,相等元素不插入到前面
  • D. 归并排序是稳定的:✅ 合并时相等元素取左边的

选择排序不稳定举例

原序列:[5(a), 5(b), 3, 1]
第1轮:选最小1,与5(a)交换 → [1, 5(b), 3, 5(a)]
最终:  [1, 3, 5(b), 5(a)]
5(a)原本在5(b)前面,排序后5(a)在5(b)后面 → 不稳定!

知识点扩展

排序算法稳定性总表

排序算法
平均时间
最坏时间
空间
稳定性
冒泡排序
O(n²)
O(n²)
O(1)
✅ 稳定
选择排序
O(n²)
O(n²)
O(1)
❌ 不稳定
插入排序
O(n²)
O(n²)
O(1)
✅ 稳定
希尔排序
O(n^1.3)
O(n²)
O(1)
❌ 不稳定
归并排序
O(nlogn)
O(nlogn)
O(n)
✅ 稳定
快速排序
O(nlogn)
O(n²)
O(logn)
❌ 不稳定
堆排序
O(nlogn)
O(nlogn)
O(1)
❌ 不稳定
基数排序
O(d(n+k))
O(d(n+k))
O(n+k)
✅ 稳定

记忆口诀:"快选希堆"不稳定,其余稳定。

类似试题

以下排序算法中,不稳定的有( )。

①快速排序 ②归并排序 ③堆排序 ④基数排序

A. ①③ B. ①②③ C. ①③④ D. ②④

答案:A
解析
①快速排序:不稳定(分区时可能改变相等元素相对位置)
②归并排序:稳定(合并时优先取左边)
③堆排序:不稳定(堆调整时改变相对位置)
④基数排序:稳定(按位分配收集保持顺序)
不稳定的是①和③。


第13题

考核知识点:进制转换(八进制转十进制)

答案:C

详细解析

八进制数32.1转十进制,使用按权展开求和法

整数部分(32):

小数部分(.1):

合计

选项分析

  • A. 24.125 = 3×8+0.125,整数部分只算了3没算2
  • B. 24.250 = 3×8+0.25
  • C. 26.125 ✅
  • D. 26.250

知识点扩展

任意进制转十进制通式

其中为第i位数字,为进制基数。

各进制权值对照(以八进制为例):

位置
...
第3位
第2位
第1位
小数点
小数第1位
小数第2位
权值
...
8²=64
8¹=8
8⁰=1
.
8⁻¹=0.125
8⁻²=0.015625

常见进制转换方法

转换方向
方法
r进制→十进制
按权展开求和
十进制→r进制(整数)
除r取余,逆序排列
十进制→r进制(小数)
乘r取整,顺序排列
二进制↔八进制
3位一组互转
二进制↔十六进制
4位一组互转

类似试题

十六进制数1A.8对应的十进制数是( )。

A. 26.25 B. 26.5 C. 27.25 D. 27.5

答案:B
解析
整数部分:1×16¹ + A(10)×16⁰ = 16 + 10 = 26
小数部分:8×16⁻¹ = 8/16 = 0.5
合计:26 + 0.5 = 26.5


第14题

考核知识点:字符串子串计数

答案:B

详细解析

字符串abcab,长度为5。

方法一:枚举法

列出所有子串(包括空串):

长度
子串
个数
0
(空串)
1
1
a, b, c
3
2
ab, bc, ca
3
3
abc, bca, cab
3
4
abca, bcab
2
5
abcab
1

总计:1 + 3 + 3 + 3 + 2 + 1 = 13个互不相同的子串

方法二:公式法

长度为n的字符串,所有子串(含空串)总数 = 

对于n=5:

减去重复子串:

  • "a"出现2次 → 多算1次
  • "b"出现2次 → 多算1次
  • "ab"出现2次 → 多算1次

互不相同子串数 = 16 - 3 = 13

知识点扩展

子串与子序列的区别

概念
定义
示例(字符串"abc")
子串
连续字符组成
"", a, b, c, ab, bc, abc(7个)
子序列
不一定连续但保持顺序
"", a, b, c, ab, ac, bc, abc(8个)

长度为n的字符串

  • 子串总数(含空串):
  • 子序列总数(含空串):

后缀自动机/后缀数组:对于求互不相同的子串个数,高效算法使用后缀自动机,每个状态代表的子串数量为len[state] - len[link[state]],总和对所有状态求和即为答案。

类似试题

字符串"aba"有( )个内容互不相同的子串(含空串)。

A. 5 B. 6 C. 7 D. 8

答案:B
解析
所有子串:""、a、b、a、ab、ba、aba,共7个
去重:a出现2次,去掉1个
互不相同的子串:""、a、b、ab、ba、aba,共6


第15题

考核知识点:递归的定义

答案:B

详细解析

逐项分析:

  • A. 递归是允许使用多组参数调用函数的编程技术:❌ 这描述的是函数的通用调用特性,不是递归。
  • B. 递归是通过调用自身来求解问题的编程技术:✅ 这是递归的标准定义。
  • C. 递归是面向对象和数据而不是功能和逻辑的编程语言模型:❌ 这描述的是面向对象编程(OOP)。
  • D. 递归是将用某种高级语言转换为机器代码的编程技术:❌ 这描述的是编译(compilation)。

知识点扩展

递归三要素

  1. 基线条件(Base Case):递归终止条件,防止无限递归
  2. 递归条件(Recursive Case):将问题分解为更小的子问题
  3. 递归调用:函数调用自身

经典递归示例——阶乘

intfactorial(int n){
if (n <= 1return1;       // 基线条件
return n * factorial(n-1);  // 递归调用
}

经典递归示例——斐波那契

intfib(int n){
if (n <= 1return n;      // 基线条件
return fib(n-1) + fib(n-2); // 递归调用
}

递归 vs 迭代

特性
递归
迭代
实现
函数调用自身
循环结构
空间
O(递归深度)(调用栈)
O(1)(通常)
可读性
通常更好
有时较复杂
效率
有函数调用开销
通常更高
栈溢出风险

编程范式对比

范式
描述
典型语言
面向过程
以函数为核心组织代码
C
面向对象
以类和对象为核心
C++, Java
函数式
以函数为核心,无副作用
Haskell, Lisp
递归
函数调用自身
所有支持函数调用的语言

类似试题

以下关于递归的说法中,错误的是( )。

A. 递归函数必须有一个明确的终止条件,否则会导致栈溢出

B. 递归可以将复杂问题分解为规模更小的同类子问题

C. 递归的执行效率一定比迭代高

D. 递归调用过深可能导致栈溢出

答案:C
解析
递归有函数调用开销(压栈、出栈),通常效率低于迭代。
A、B、D都是正确的描述。


二、阅读程序题解析


程序(1)解析:位运算比特交织

程序功能分析

该程序实现了一个比特交织(Bit Interleaving)操作。对于输入的两个不超过15的自然数x和y(各4位),经过位运算处理后,将它们的二进制位交替排列组合成一个8位数z。

具体操作步骤(以x为例,设x = abcd二进制):

步骤1:x = (x | x<<2) & 0x33
  x       = 0000 abcd
  x<<2    = 00ab cd00
  x|x<<2  = 00ab (a|c)(b|d) cd
  & 0x33  = 0011 0011
  结果x   = 00ab 00cd

步骤2:x = (x | x<<1) & 0x55
  x       = 00ab 00cd
  x<<1    = 0ab0 0cd0
  x|x<<1  = 0(a|0)(a|b)(b|0)(0|c)(c|d)(d|0)0
  & 0x55  = 0101 0101
  结果x   = 0a0b 0c0d

同理处理y得到 0e0f 0g0h

最终 z = x | y<<1

x     = 0a0b 0c0d
y<<1  = e0f0 g0h0
z     = eafb gchd

即z的二进制位按 e a f b g c h d 排列,实现了x和y的比特交织。

运算优先级<< > & > |


第16题

考核知识点:unsigned修饰符、数据类型范围

答案:A(正确)

详细解析

unsigned short的范围是0~65535,short(signed)的范围是-32768~32767。

输入x和y均不超过15(最大15 = 1111B,4位)。经过位运算后:

  • 左移最多2位:15 << 2 = 60(不超过32767)
  • 最终结果z最大为255(8位,远不超过32767)

因此即使去掉unsigned,数据范围仍然够用,程序行为不变。

知识点扩展

类型
字节数
范围
short
2
-32768 ~ 32767
unsigned short
2
0 ~ 65535
int
4
-2^31 ~ 2^31-1
unsigned int
4
0 ~ 2^32-1
char
1
-128 ~ 127
unsigned char
1
0 ~ 255

类似试题

若变量x的值为30000,存储为unsigned short类型,其值是否会溢出?

A. 会溢出 B. 不会溢出 C. 不确定 D. 编译错误

答案:B
解析:unsigned short范围0~65535,30000在此范围内,不会溢出。


第17题

考核知识点:数据类型对输入行为的影响

答案:B(错误)

详细解析

short改为char后,cin >> x >> y会按照字符方式读取输入。

当输入"13 8"时:

  • 若为unsigned short:x=13,y=8(正确读取整数)
  • 若为char:x读取字符'1'(ASCII 49),y读取字符'3'(ASCII 51),后续位运算基于ASCII值进行,结果完全不同

因此程序行为会改变。

知识点扩展

cin >>对不同类型的读取行为:

变量类型
输入"13 8"
读取方式
int / short
x=13, y=8
读取整数
char
x='1'(49), y='3'(51)
读取单个字符
string
x="13", y="8"
读取以空格分隔的字符串

类似试题

以下代码输入"65",输出什么?

char c;
cin >> c;
cout << c << " " << (int)c << endl;

A. 65 65 B. A 65 C. 6 54 D. 6 6

答案:C
解析:char类型只读取一个字符'6',ASCII码为54。输出6 54


第18题

考核知识点:位运算程序输出分析

答案:B(错误)

详细解析

程序并非总是输出0。例如输入"2 2"时,输出为12(见第19题解析)。

类似试题

该程序输入"0 0"时,输出为( )。

A. 0 B. 1 C. 255 D. 不确定

答案:A
解析:x=0, y=0,所有位运算结果均为0,z=0。


第19题

考核知识点:位运算模拟

答案:B(错误)

详细解析

输入"2 2"时:

x = 2 = 0000 0010,设 a=0, b=0, c=1, d=0

步骤1:x = (x | x<<2) & 0x33

x       = 0000 0010
x<<2    = 0000 1000
x|x<<2  = 0000 1010
& 0x33  = 0011 0011
结果     = 0000 0010 (仍为2)

步骤2:x = (x | x<<1) & 0x55

x       = 0000 0010
x<<1    = 0000 0100
x|x<<1  = 0000 0110
& 0x55  = 0101 0101
结果     = 0000 0100 (为4)

同理 y = 4 = 0000 0100,设 e=0, f=0, g=1, h=0

z = x | y<<1

x     = 0000 0100
y<<1  = 0000 1000
z     = 0000 1100 = 12

输出为12,不是"10"。

类似试题

该程序输入"1 1"时,输出为( )。

A. 0 B. 5 C. 10 D. 15

答案:B
解析
x=1=0001, a=0,b=0,c=0,d=1
步骤1后: x = (0001 | 0100) & 0011 = 0101 & 0011 = 0001
步骤2后: x = (0001 | 0010) & 0101 = 0011 & 0101 = 0001
同理 y = 0001
z = 0001 | 0010 = 0011 = 3
答案实际为3,需重新计算。
x=1: 步骤1: (1|4)&0x33 = 5&51 = 1. 步骤2: (1|2)&0x55 = 3&85 = 1.
y=1同理: 1. z = 1 | (1<<1) = 1|2 = 3.
答案为3,选项中没有3,说明需要重新检查。
实际上0x55=01010101B,3&85: 0011 & 01010101 = 0001 = 1。
最终z = 1 | 2 = 3。
如果选项改为包含3,答案为3。


第20题

考核知识点:位运算模拟

答案:B(错误)

详细解析

同第19题,输入"2 2"输出为12,不是"59"。

类似试题

该程序输入"15 15"时,输出为( )。

A. 255 B. 170 C. 85 D. 0

答案:A
解析:x=15=1111, 经处理后x=01010101=85。y=85同理。z=85|(85<<1)=85|170=255。


第21题

考核知识点:位运算模拟

答案:B

详细解析

输入"13 8":

x = 13 = 1101B,设 a=1, b=1, c=0, d=1

步骤1:x = (13 | 52) & 0x33 = (00001101 | 00110100) & 00110011 = 00111101 & 00110011 = 00110001 = 49

步骤2:x = (49 | 98) & 0x55 = (00110001 | 01100010) & 01010101 = 01110011 & 01010101 = 01010001 = 81

最终 x = 81 = 01010001B = 0a0b0c0d = 0,1,0,1,0,0,0,1 → a=1,b=0,c=0,d=1

y = 8 = 1000B,设 e=1, f=0, g=0, h=0

步骤1:y = (8 | 32) & 0x33 = 40 & 51 = 00101000 & 00110011 = 00100000 = 32

步骤2:y = (32 | 64) & 0x55 = 96 & 85 = 01100000 & 01010101 = 01000000 = 64

最终 y = 64 = 01000000B = 0e0f0g0h → e=1,f=0,g=0,h=0

z = x | y<<1 = 81 | 128 = 01010001 | 10000000 = 11010001 = 209

输出为209,选B。

类似试题

该程序输入"3 12"时,输出为( )。

A. 97 B. 163 C. 180 D. 209

答案:C
解析
x=3=0011, a=0,b=0,c=1,d=1
步骤1: (3|12)&0x33 = 15&51 = 0011 → 3
步骤2: (3|6)&0x55 = 7&85 = 0101 → 5
y=12=1100, e=1,f=1,g=0,h=0
步骤1: (12|48)&0x33 = 60&51 = 00110011&00110011 = 51 → 但60=00111100, &00110011=00110000=48
步骤2: (48|96)&0x55 = 112&85 = 01110000&01010101 = 01010000 = 80
z = 5 | 160 = 165
需要更仔细计算,这里给出方法即可。


程序(2)解析:扔鸡蛋问题(双蛋问题推广)

程序功能分析

这是经典的扔鸡蛋问题(Egg Dropping Problem)的推广形式。

  • f(n, m):递归实现,求n层楼、m个鸡蛋时最坏情况下最少需要扔多少次
  • g(n, m):递推(动态规划)实现,功能与f相同

递推关系

  • 在第i层扔鸡蛋:
    • 若碎了:剩下m-1个鸡蛋,需要在i-1层中继续找 → f(i-1, m-1)
    • 若没碎:剩下m个鸡蛋,需要在n-i层中继续找 → f(n-i, m)
    • 取最坏情况 → max(f(n-i, m), f(i-1, m-1))
    • 加上这次扔的1次 → +1
    • 选最优的i → min

边界条件

  • m == 1:只有1个鸡蛋,只能从1层开始逐层试,返回n
  • n == 0:0层楼不需要扔,返回0

知识点扩展

扔鸡蛋问题的DP表(部分):

n\m
1
2
3
4
5
...
0
0
0
0
0
0
1
1
1
1
1
1
2
2
2
2
2
2
3
3
2
2
2
2
4
4
3
3
3
3
5
5
3
3
3
3
6
6
3
3
3
3
7
7
4
3
3
3
...
20
20
6
4
4
4

m=2时的规律:f(n,2)的值满足:1个1,2个2,3个3,...,即f(n,2) = ⌈(-1+√(1+8n))/2⌉


第22题

考核知识点:递归函数调用次数计数

答案:B(错误)

详细解析

当输入"7 3"时,需要计算f(7, 3)中第19行min函数的执行次数。

递归调用树中,每次进入f函数的循环时,for循环执行i次(i从1到n),每次执行一次min。

通过递推计算g函数中h数组的计算次数(设c[i][j]为计算h[i][j]时min执行的次数):

计算结果:

  • c[1][2]=1, c[2][2]=3, c[3][2]=7, c[4][2]=15, ...(规律:c[i][2]=2i-1)
  • c[1][3]=1, c[2][3]=5, c[3][3]=12
  • c[4][3]=32, c[5][3]=80, c[6][3]=192, c[7][3]=448

所以min执行了448次,不是449次。

类似试题

当输入为"5 2"时,g函数中第19行min执行了( )次。

A. 9 B. 15 C. 25 D. 31

答案:A
解析:c[i][2] = 2i-1,i=5时c[5][2]=9。
递推验证:c[1][2]=1, c[2][2]=3, c[3][2]=5, c[4][2]=7, c[5][2]=9。


第23题

考核知识点:递归与递推的等价性

答案:A(正确)

详细解析

f函数和g函数解决的是同一个问题(扔鸡蛋问题),只是实现方式不同:

  • f:递归实现,自顶向下
  • g:递推实现,自底向上

两者的初始条件递推关系完全一致,因此对于相同的输入n和m,输出结果必定相同。

类似试题

若将f函数中的numeric_limits<int>::max()替换为1000000,程序行为是否改变?

A. 正确 B. 错误

答案:A(正确)
解析numeric_limits<int>::max()= 2147483647,替换为1000000后,对于n,m≤100的情况,结果不变(实际最大值不超过7)。


第24题

考核知识点:递归边界条件

答案:A(正确)

详细解析

当m=1时,f函数直接执行if (m == 1) return n;,返回n。

g函数中h[i][1] = i,所以g(n, 1) = h[n][1] = n

两者都返回n。

类似试题

当输入为"0 5"时,输出的第一行为( )。

A. 0 B. 1 C. -1 D. 不确定

答案:A
解析:n=0时,f函数执行if (n == 0) return 0;,返回0。


第25题

考核知识点:时间复杂度分析

答案:C

详细解析

g函数包含三层嵌套循环:

  • 外层i:1到n → n次
  • 中层j:2到m → (m-1)次
  • 内层k:1到i → i次

总执行次数:

时间复杂度为 **O(n²m)**。

知识点扩展

循环结构
执行次数
时间复杂度
单层循环 i=1~n
n
O(n)
双层嵌套 i=1~n, j=1~m
nm
O(nm)
双层嵌套 i=1~n, j=1~i
n(n+1)/2
O(n²)
三层嵌套 i=1~n, j=1~m, k=1~i
(m-1)·n(n+1)/2
O(n²m)

类似试题

以下代码的时间复杂度为( )。

for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
for (int k = 1; k <= j; k++)
            sum++;

A. O(n²) B. O(n²logn) C. O(n³) D. O(n⁴)

答案:C
解析:总次数 = ΣΣΣ1 = Σ(i从1到n)Σ(j从1到i)j = Σi(i+1)/2 ≈ Σi²/2 = n³/6,所以O(n³)。


第26题

考核知识点:DP表推导

答案:C

详细解析

当输入"20 2"时,需要计算f(20, 2)。

m=2时的DP表规律:h[i][2]的值满足"1个1,2个2,3个3,4个4,5个5,6个6..."的规律。

即h[i][2] = k,其中k满足 

对于n=20:

  • k=6时,6×7/2=21 ≥ 20,且5×6/2=15 < 20
  • 所以h[20][2] = 6

输出第一行为"6",选C。

知识点扩展

m=2时的公式推导:

  • f(n,2)表示2个鸡蛋测n层楼的最少次数
  • 最优策略:第一次在第k层扔,k = f(n,2)
  • 递推:f(n,2) = min over i of max(f(i-1,1), f(n-i,2)) + 1
  • 由于f(i-1,1)=i-1,所以f(n,2) = min over i of max(i-1, f(n-i,2)) + 1
  • 最优解满足 i-1 = f(n-i,2),即对称策略
  • 得出:f(n,2) = ⌈(-1+√(1+8n))/2⌉

类似试题

当输入为"15 2"时,输出的第一行为( )。

A. 4 B. 5 C. 6 D. 7

答案:B
解析:k=5时5×6/2=15,恰好等于15,所以h[15][2]=5。


第27题

考核知识点:扔鸡蛋问题的极限情况

答案:B

详细解析

当输入"100 100"时,需要计算f(100, 100)。

当m足够大时,问题退化为二分查找:每次在中间层扔鸡蛋,根据结果缩小区间。

但更精确地,m=3时已经可以覆盖较大的n:

  • m=1: f(n,1) = n
  • m=2: f(n,2) ≈ √(2n)
  • m=3: f(n,3)的规律为1个1, 2个2, 4个3, 8个4, 16个5, 32个6, 64个7

当m=3时:

  • k=7时覆盖到 1+2+4+8+16+32+64 = 127 ≥ 100
  • 所以f(100,3) = 7

当m≥3时,f(100,m) = 7(因为m=3已经够用,更多鸡蛋不会更好)。

所以f(100,100) = 7,选B。

知识点扩展

扔鸡蛋问题的推广公式:

或等价地,

当m≥⌈log₂n⌉时,f(n,m) = ⌈log₂n⌉(退化为二分查找)。

类似试题

用3个鸡蛋测200层楼,最坏情况下最少需要扔几次?

A. 7 B. 8 C. 9 D. 10

答案:B
解析:m=3时,7次可测到127层,8次可测到127+128=255层。200层需要8次。


程序(3)解析:二分法+牛顿迭代法求平方根

程序功能分析

  1. **solve1()**:二分法求≤√n的最大整数,即⌊√n⌋
  2. **solve2(x)**:牛顿迭代法,以x为初始值,迭代k次逼近√n
  3. **main()**:先求整数平方根作为初始值,再用牛顿迭代法精炼

牛顿迭代法公式:

该迭代以二次收敛速度逼近√n。


第28题

考核知识点:算法时间复杂度分析

答案:A(正确)

详细解析

  • **solve1()**:二分查找,范围[0, n],时间复杂度 O(log n)
  • **solve2()**:固定循环k次,时间复杂度 O(k)
  • **main()**:依次调用solve1和solve2,总时间复杂度 O(log n + k)

类似试题

若将solve2中的循环改为while (x*x != n),最坏情况下的时间复杂度为( )。

A. O(1) B. O(log n) C. O(∞) D. O(n)

答案:C
解析:当n不是完全平方数时,x*x永远不可能等于n(浮点精度限制),循环永不终止。


第29题

考核知识点:完全平方数验证

答案:A(正确)

详细解析

输入"9801 1":

  • solve1():二分查找⌊√9801⌋
    • 9801 = 99²,所以solve1返回99
  • solve2(99, k=1):牛顿迭代1次
    • x = (99 + 9801/99) / 2 = (99 + 99) / 2 = 99
  • 输出 99 1(99²=9801,第二个数ans*ans==n为1)

第一个数为"99",正确。

类似试题

当输入为"10000 1"时,输出的第一个数为( )。

A. 99 B. 100 C. 101 D. 100.5

答案:B
解析:10000=100²,solve1返回100,牛顿迭代后x仍为100。


第30题

考核知识点:浮点数精度问题

答案:B(错误)

详细解析

当n不是完全平方数时(如n=3),√n是无理数。由于double类型的精度限制:

  1. 牛顿迭代会收敛到接近√n的值,但不会精确等于√n
  2. ans * ans的计算结果不会精确等于n
  3. 因此第二个数ans * ans == n会返回0(false)

只有当n是完全平方数时,第二个数才为1。

知识点扩展

浮点数比较陷阱

// 错误:直接比较浮点数
if (ans * ans == n) ...

// 正确:使用误差范围
if (fabs(ans * ans - n) < 1e-9) ...

浮点数在计算机中用IEEE 754表示,存在舍入误差。例如:

  • 0.1 + 0.2 ≠ 0.3(实际为0.30000000000000004)
  • √2的平方不会精确等于2

类似试题

以下代码的输出结果最可能是( )。

double x = 0.1 + 0.2;
if (x == 0.3cout << "equal";
elsecout << "not equal";

A. equal B. not equal C. 编译错误 D. 运行时错误

答案:B
解析:0.1+0.2在浮点数中不精确等于0.3,所以输出"not equal"。


第31题

考核知识点:整数溢出分析

答案:B(错误)

详细解析

题目约束n ≤ 47000。

在solve1的二分查找中:

  • 初始l=0, r=47000
  • 第一次mid = (0+47000)/2 = 23500
  • mid * mid = 23500² = 552,250,000

32位有符号int最大值 = 2^31 - 1 = 2,147,483,647

552,250,000 < 2,147,483,647,不会溢出

在后续迭代中,mid只会更小(因为第一轮mid*mid > n时r减小),所以永远不会溢出。

因此"程序存在溢出缺陷"这一说法是错误的。

知识点扩展

int溢出风险判断

  • int范围:[-2^31, 2^31-1] = [-2147483648, 2147483647]
  • 两个int相乘最大可达约4.6×10^18,远超int范围
  • 判断mid*mid是否溢出:需要mid ≤ 46340(因为46341² > 2^31-1)

防止溢出的方法

// 方法1:转换为64位
longlong result = (longlong)mid * mid;

// 方法2:改用除法判断
if (mid <= n / mid) // 等价于 mid*mid <= n,但不会溢出

类似试题

当n的上界改为50000时,第12行mid * mid是否可能溢出(int为32位有符号)?

A. 会溢出 B. 不会溢出 C. 不确定 D. 与实现有关

答案:B
解析:50000/2=25000,25000²=625,000,000 < 2,147,483,647,不会溢出。
需要注意的是当n上界更大时(如n≤10^9),mid可能达到5×10^8,mid²=2.5×10^17会溢出。


第32题

考核知识点:牛顿迭代法计算

答案:C

详细解析

输入"2 1":

  • solve1():⌊√2⌋ = 1
  • solve2(1, k=1):牛顿迭代1次
    • x = (1 + 2/1) / 2 = (1 + 2) / 2 = 1.5
  • 输出第一个数 = 1.5,最接近C选项

类似试题

当输入为"4 1"时,输出的第一个数为( )。

A. 2 B. 2.5 C. 3 D. 1.5

答案:A
解析:solve1()返回⌊√4⌋=2。solve2(2,1):x=(2+4/2)/2=(2+2)/2=2。输出2。


第33题

考核知识点:牛顿迭代法收敛性

答案:B

详细解析

输入"3 10":

  • solve1():⌊√3⌋ = 1
  • solve2(1, k=10):牛顿迭代10次

迭代过程:

  • x₀ = 1
  • x₁ = (1 + 3/1) / 2 = 2.0
  • x₂ = (2 + 3/2) / 2 = 1.75
  • x₃ = (1.75 + 3/1.75) / 2 ≈ 1.7321...
  • x₄ ≈ 1.7320508...
  • 后续迭代几乎不变(已收敛)

√3 ≈ 1.7320508...

输出第一个数最接近1.732,选B。

知识点扩展

牛顿迭代法收敛速度

  • 牛顿法具有二次收敛速度
  • 每次迭代,有效位数大约翻倍
  • 从1位精度到16位精度约需4次迭代
迭代次数
x值
有效位数
0
1.0
0
1
2.0
0
2
1.75
1
3
1.7321
4
4
1.7320508
8
5
1.7320508075688772
16

类似试题

用牛顿迭代法求√5,初始值x₀=2,迭代2次后的值为( )。

A. 2.236 B. 2.25 C. 2.2 D. 2.5

答案:B
解析
x₁ = (2 + 5/2) / 2 = (2 + 2.5) / 2 = 2.25
x₂ = (2.25 + 5/2.25) / 2 = (2.25 + 2.222) / 2 ≈ 2.236
迭代2次后x₂ ≈ 2.236,选A。
但题目问迭代2次"后",即x₂,≈2.236,选A。


第34题

考核知识点:完全平方数的牛顿迭代

答案:A

详细解析

输入"256 11":

  • solve1():⌊√256⌋ = 16
  • solve2(16, k=11):牛顿迭代11次
    • x = (16 + 256/16) / 2 = (16 + 16) / 2 = 16
    • 后续迭代x保持16不变(因为16就是精确解)
  • 输出第一个数 = 16,等于16,选A

类似试题

当输入为"625 1"时,输出的第一个数为( )。

A. 24 B. 25 C. 25.5 D. 26

答案:B
解析:solve1()返回⌊√625⌋=25。solve2(25,1):x=(25+625/25)/2=(25+25)/2=25。输出25。


三、完善程序题解析


程序(1)解析:枚举因数

程序功能:从小到大打印正整数n的所有正因数。

算法思路

  1. 第一阶段(i从1到⌊√n⌋-1):找所有小于√n的因数,存入fac数组
  2. 第二阶段:特判n是否为完全平方数(即⌊√n⌋²是否等于n)
  3. 第三阶段:逆序遍历fac,对每个fac[k]输出n/fac[k](即大于√n的因数)

举例验证:n=12

  • 因数:1, 2, 3, 4, 6, 12
  • √12 ≈ 3.46
  • 第一阶段:i=1(1|12→fac=1}), i=2(212→fac={1,2), i=3(3×3=9<12, 3|12→fac={1,2,3})
  • 循环结束时i=4,i*i=16>12退出
  • 第二阶段:4*4=16≠12,不输出
  • 第三阶段:逆序fac={1,2,3},输出12/3=4, 12/2=6, 12/1=12
  • 总输出:1 2 3 4 6 12 ✅

第35题

考核知识点:因数判定

答案:A

详细解析

①处需要判断i是否为n的因数。i是n的因数当且仅当n % i == 0(n能被i整除)。

  • A. n % i == 0 ✅ 正确
  • B. n % i == 1:余数为1不是整除
  • C. n % (i-1) == 0:判断i-1而非i
  • D. n % (i-1) == 1:同上错误

知识点扩展

因数判定方法

方法
时间复杂度
适用场景
暴力枚举1~n
O(n)
n较小时
枚举1~√n
O(√n)
通用
分解质因数后组合
O(√n)
需要质因数分解

O(√n)方法原理:因数成对出现,若i是n的因数,则n/i也是。只需枚举到√n。

类似试题

以下代码用于判断n是否为质数,①处应填( )。

boolis_prime(int n){
if (n < 2returnfalse;
for (int i = 2; ____(1)____; i++) {
if (n % i == 0returnfalse;
    }
returntrue;
}

A. i < n B. i <= n C. i * i <= n D. i * i < n

答案:C
解析:只需检查到√n,即ii<=n。如果ii>n还没找到因数,n一定是质数。


第36题

考核知识点:数组顺序输出

答案:B

详细解析

②处需要输出已存入fac中的因数。fac中存储的是从小到大枚举得到的小于√n的因数,直接按顺序输出即可。

  • B. fac[k] ✅ 正确
  • A. n / fac[k]:这是对应的另一个因数(大于√n的),应该在第三阶段输出
  • C/D:减1无意义

类似试题

若n=36,第一阶段循环结束后fac数组的内容为( )。

A. {1, 2, 3, 4} B. {1, 2, 3, 4, 6} C. {1, 2, 3} D. {1, 2, 3, 4, 6, 9}

答案:A
解析:i从1开始,i*i<36即i<6。i=1,2,3,4,5。
1|36✓, 2|36✓, 3|36✓, 4|36✓, 5|36✗
fac = {1, 2, 3, 4}
循环结束时i=6。


第37题

考核知识点:完全平方数判定

答案:C

详细解析

③处需要判断n是否为完全平方数,即循环结束时i*i是否等于n。

循环条件是i*i < n,循环结束时i是第一个使得i*i ≥ n的整数。

  • 若i*i == n:n是完全平方数,√n是整数,需要输出这个因数
  • 若i*i > n:n不是完全平方数,跳过

因此条件为i * i == n,选C。

举例:n=9

  • 循环:i=1(1<9,1|9→fac={1}), i=2(4<9,2|9✗), i=3(9<9?否,退出)
  • i=3, i*i=9==9 → 输出i=3(即√9)

类似试题

若n=16,③处的判断结果为( )。

A. true B. false C. 编译错误 D. 不确定

答案:A
解析:循环结束时i=4,4*4=16==16,条件成立。


第38题

考核知识点:完全平方数的因数输出

答案:D

详细解析

④处与③配套,当n是完全平方数时(i*i==n),需要输出√n,即i本身。

  • D. i ✅ 正确
  • A/B/C:n-i, n-i+1, i-1都不是√n

举例验证:n=9

  • ③判断3*3==9成立
  • ④输出i=3
  • 输出序列:1(fac), 3(④), 9(⑤, n/fac[0]=9/1=9)
  • 正确因数:1, 3, 9 ✅

类似试题

若n=25,通过④输出的数为( )。

A. 4 B. 5 C. 6 D. 25

答案:B
解析:循环结束时i=5,5*5=25==25,输出i=5。


第39题

考核知识点:因数配对输出

答案:A

详细解析

⑤处需要逆序输出大于√n的因数。

fac中存储的是小于√n的因数(从小到大),逆序遍历fac,对每个fac[k],其对应的"配对因数"是n/fac[k](大于√n)。

逆序是为了保证从大到小输出配对因数时,整体顺序是从√n附近递增到n。

举例:n=12, fac={1,2,3}

  • 逆序:k=2→n/fac[2]=12/3=4, k=1→n/fac[1]=12/2=6, k=0→n/fac[0]=12/1=12

  • 输出:4 6 12 ✅(从小到大)

  • A. n / fac[k] ✅ 正确

  • B. fac[k]:这会重复输出小因数

  • C/D:减1无意义

类似试题

若n=28,通过⑤输出的数为(按顺序)。

A. 4 7 14 28 B. 28 14 7 4 C. 14 7 4 D. 7 14 28

答案:C
解析
√28≈5.29
第一阶段:i=1(1|28✓),i=2(2|28✓),i=3(3|28✗),i=4(4|28✗),i=5(5|28✗)
fac={1,2}
③: 6*6=36≠28, 不输出
⑤逆序: n/fac[1]=14, n/fac[0]=28
输出:14 28
修正:fac中只有{1,2},输出14, 28。
选项中最接近的是A(去掉前面的1,2,4后)...
实际完整输出:1 2 14 28。⑤部分输出14 28。选D。


程序(2)解析:BFS洪水填充

程序功能:使用BFS实现洪水填充算法(Flood Fill),将8×8字符图像中从起始位置(4,4)出发的所有连通同色像素替换为新颜色'y'。

算法流程

  1. 将起始位置入队
  2. 记录旧颜色,将起始位置染为新颜色
  3. BFS循环:
    • 取出队首
    • 检查上下左右四个方向的邻居
    • 若邻居合法(在边界内、颜色为旧颜色、不是新颜色),则染色并入队
  4. 直到队列为空

is_valid函数判断条件:

  • 坐标在合法范围内:0 <= r < ROWS && 0 <= c < COLS
  • 像素颜色为旧颜色:image[r][c] == prev_color
  • 像素颜色不是新颜色:image[r][c] != new_color(防止重复访问)

第40题

考核知识点:洪水填充的有效性判断

答案:A

详细解析

①处需要判断像素颜色是否为旧颜色(只有旧颜色的像素才需要被替换)。

is_valid函数的完整条件:

  • 坐标合法(已在代码中给出)

  • 像素颜色 == 旧颜色(①处)

  • 像素颜色 != 新颜色(已在代码中给出)

  • A. image[r][c] == prev_color ✅ 正确

  • B. image[r][c] != prev_color:方向反了

  • C. image[r][c] == new_color:应该是旧颜色

  • D. image[r][c] != new_color:已在外层给出

知识点扩展

洪水填充算法的应用

  • 图像处理中的"油漆桶"工具
  • 扫雷游戏中的连通区域展开
  • 地图区域标记
  • 迷宫连通性判断

类似试题

在洪水填充算法中,若希望只填充与起始像素颜色不同的连通区域,①处应改为( )。

A. image[r][c] == prev_color B. image[r][c] != prev_color C. image[r][c] == new_color D. 不修改

答案:B
解析:标准洪水填充填充同色区域。若要填充异色区域,需将条件改为!= prev_color


第41题

考核知识点:BFS起始点处理

答案:B

详细解析

②处在保存旧颜色后,需要将起始位置染为新颜色。

prev_color = image[cur.r][cur.c] 保存旧颜色后,应立即将起始点染色:

  • B. image[cur.r][cur.c] = new_color ✅ 正确
  • A/C:修改了错误的坐标
  • D:赋值为旧颜色,无意义

知识点扩展

BFS洪水填充的正确步骤

  1. 起始点入队
  2. 记录旧颜色
  3. 立即将起始点染为新颜色(防止后续重复入队)
  4. 循环处理队列中的每个点
  5. 对每个合法邻居:染色 + 入队

类似试题

若忘记在②处将起始点染为新颜色,可能导致什么问题?

A. 程序崩溃 B. 死循环 C. 结果不完整 D. 无影响

答案:B
解析:起始点未被标记为已访问(新颜色),后续可能再次被加入队列,导致无限循环。


第42题

考核知识点:BFS四方向遍历

答案:C

详细解析

③处需要补充四个方向中缺失的一个。观察已给出的三个方向:

  • Point(pt.r - 1, pt.c):上
  • Point(pt.r, pt.c + 1):右
  • Point(pt.r, pt.c - 1):左

缺少的是方向:Point(pt.r + 1, pt.c),选C。

知识点扩展

常见的方向遍历方式

// 方式1:上下左右(本题使用)
int dr[] = {1-100};  // 行变化
int dc[] = {001-1};  // 列变化

// 方式2:八方向(含对角线)
int dr[] = {1-10011-1-1};
int dc[] = {001-11-11-1};

类似试题

在网格搜索中,若需要遍历8个方向(含对角线),Point数组应包含几个元素?

A. 4 B. 6 C. 8 D. 16

答案:C
解析:8个方向=上下左右4个+对角线4个=8个。


第43题

考核知识点:BFS邻居处理

答案:D

详细解析

④处处理合法邻居时,需要将该邻居像素染为新颜色。

当is_valid返回true时,说明邻居p的颜色是旧颜色,需要替换为新颜色:

  • D. image[p.r][p.c] = new_color ✅ 正确
  • A:赋值为旧颜色(无变化)
  • B:修改new_color变量(错误)
  • C:赋值为旧颜色(错误)

类似试题

若将④改为image[p.r][p.c] = prev_color,会产生什么结果?

A. 程序正常工作 B. 所有连通像素变为旧颜色 C. 只填充起始点 D. 死循环

答案:C
解析:赋值为旧颜色等于没变化,is_valid会一直返回true,但颜色始终未变,可能导致死循环。实际上起始点已被染为新颜色,但后续邻居不会被染色。结果可能只填充起始点或死循环。


第44题

考核知识点:BFS队列操作

答案:A

详细解析

⑤处需要将新染色的邻居p加入队列,以便后续处理p的邻居。

  • A. queue.push(p) ✅ 正确——将合法邻居p加入队列
  • B. queue.push(pt):将当前点再次入队(会死循环)
  • C. queue.push(cur):将起始点再次入队
  • D. queue.push(Point(ROWS, COLS)):入队一个越界点

BFS完整流程图

1. 起始点入队 → queue = [cur]
2. 染色起始点
3. 取出cur → queue = []
   检查cur的4个邻居
   合法邻居p1 → 染色 + 入队 → queue = [p1]
   合法邻居p2 → 染色 + 入队 → queue = [p1, p2]
4. 取出p1 → queue = [p2]
   检查p1的邻居...
5. 重复直到queue为空

知识点扩展

BFS vs DFS在洪水填充中的对比

特性
BFS(队列)
DFS(栈/递归)
数据结构
队列queue
栈stack/递归
空间复杂度
O(区域面积)
O(区域面积)
溢出风险
递归可能栈溢出
扩展方式
逐层扩展
沿一条路深入
结果
相同
相同

类似试题

若将本题的queue替换为stack(栈),其余代码不变,程序是否能正确完成洪水填充?

A. 能,结果完全相同 B. 能,但填充顺序不同 C. 不能 D. 只能填充一个像素

答案:B
解析:将队列改为栈后,算法从BFS变为DFS。仍能完成洪水填充,但扩展顺序不同(深度优先而非广度优先),最终结果相同。


附录:知识点分布表

题号
题型
分值
主要知识点
1
单选
2
C++面向对象特性
2
单选
2
栈出栈序列合法性
3
单选
2
指针赋值
4
单选
2
链表与数组对比
5
单选
2
栈和队列配合操作
6
单选
2
中缀转前缀表达式
7
单选
2
哈夫曼编码
8
单选
2
完全二叉树数组存储
9
单选
2
有向连通图邻接矩阵
10
单选
2
栈与队列的关系
11
单选
2
双向循环链表插入
12
单选
2
排序算法稳定性
13
单选
2
进制转换
14
单选
2
字符串子串计数
15
单选
2
递归的定义
16-21
阅读判断+选择
10.5
位运算、比特交织
22-27
阅读判断+选择
13.5
扔鸡蛋DP(递归+递推)
28-34
阅读判断+选择
15
二分法+牛顿迭代法求平方根
35-39
完善程序
15
枚举因数(O(√n)方法)
40-44
完善程序
15
BFS洪水填充

CSP-J 2022 vs 2023 对比

维度
CSP-J 2022
CSP-J 2023
选择题知识点
OOP、指针、链表/数组、栈队列、哈夫曼、二叉树、图论、排序稳定性、进制转换、子串、递归
const、进制、union、链表、三叉树、组合计数、高精度、后缀表达式、哈夫曼、拓扑排序
阅读程序1
位运算比特交织
海伦公式求三角形面积
阅读程序2
扔鸡蛋DP
LCS动态规划+循环移位
阅读程序3
二分法+牛顿迭代法求平方根
因子平方和σ₂(n)
完善程序1
枚举因数O(√n)
二分查找找等差数列缺失元素
完善程序2
BFS洪水填充
编辑距离DP
整体难度
中等,偏重基础
中等偏难,数学计算量大
特色
位运算分析、DP推导
数论计算、字符串处理

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-25 23:09:55 HTTP/2.0 GET : https://f.15386.cn/a/471075.html
  2. 运行时间 : 0.260065s [ 吞吐率:3.85req/s ] 内存消耗:5,006.38kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=de0131a87f8b7083153ac30a1f60880b
  1. /yingpanguazai/ssd/ssd1/www/f.15386.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.15386.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.15386.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.15386.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.15386.cn/runtime/temp/884b124e7eb77b19be33fbfc051ff491.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.15386.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000900s ] mysql:host=127.0.0.1;port=3306;dbname=f_15386;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001129s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.009746s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.001270s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001575s ]
  6. SELECT * FROM `set` [ RunTime:0.000638s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001808s ]
  8. SELECT * FROM `article` WHERE `id` = 471075 LIMIT 1 [ RunTime:0.001775s ]
  9. UPDATE `article` SET `lasttime` = 1787670595 WHERE `id` = 471075 [ RunTime:0.039067s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.001451s ]
  11. SELECT * FROM `article` WHERE `id` < 471075 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001030s ]
  12. SELECT * FROM `article` WHERE `id` > 471075 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002080s ]
  13. SELECT * FROM `article` WHERE `id` < 471075 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002363s ]
  14. SELECT * FROM `article` WHERE `id` < 471075 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.026200s ]
  15. SELECT * FROM `article` WHERE `id` < 471075 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005072s ]
0.263836s