#291. GESP2026年3月五级选择题

GESP2026年3月五级选择题

2026年03月CCF GESP C++五级单选题(共15题,每题2分,满分30分)

  1. 关于单链表、双链表和循环链表,下列说法正确的是?( ) {{ select(1) }}
  • 在单链表中,若已知任意结点的指针,则可以在O(1)时间内删除该结点
  • 循环链表中一定不存在空指针
  • 在循环双链表中,尾结点的next指针一定为nullptr
  • 在带头结点的循环单链表中,判定链表是否为空只需判断头结点的next是否指向自身
  1. 双向循环链表中要在结点p之前插入新结点s(均非空),以下指针操作正确的是?( ) {{ select(2) }}
  • s->next = p; p->prev = s; p->next = s; s->prev = p;
  • s->prev = p; s->next = p->next; p->next->prev = s; p->next = s;
  • s->prev = p->prev; s->next = p; p->prev->next = s; p->prev = s;
  • s->prev = nullptr; s->next = p; p->prev = s;
  1. 下面函数用“哑结点”统一处理删除单向链表中的头结点与中间结点,横线处应填?( ) {{ select(3) }}
  • cur = cur->next;
  • cur->next = del->next;
  • del->next = cur->next;
  • cur->next = nullptr;

  1. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }实现的欧几里得算法,执行gcd(48, 18)得到的调用序列为?( ) {{ select(4) }}
  • gcd(48,18) -> gcd(18,12) -> gcd(12,6) -> gcd(6,0)
  • gcd(48,18) -> gcd(30,18) -> gcd(12,18)
  • gcd(48,18) -> gcd(18,30) -> gcd(30,6)
  • gcd(48,18) -> gcd(12,18) -> gcd(6,12)
  1. 下面代码实现了欧拉(线性)筛,横线处应填写?( ) {{ select(5) }}
  • j <= n
  • j < sqrt(n)
  • j < primes.size()
  • j < i

  1. 埃氏筛中将内层循环从j = ii开始而不是j = 2i的主要原因是?( ) {{ select(6) }}
  • 因为2*i一定不是合数
  • i*i一定是质数
  • 小于i*i的i的倍数已被更小质因子筛过
  • 这样可以把时间复杂度降为O(n)

  1. 执行指定代码(check函数判断能否选k个元素间距≥dist,solve函数二分求最大dist),输入n=5、k=3、a=[1,2,8,4,9],运行结果为?( ) {{ select(7) }}
  • 2
  • 3
  • 4
  • 5

  1. 在升序数组中查找第一个大于等于x的位置,下面循环中横线应填?( ) {{ select(8) }}
  • r = mid;
  • r = mid - 1;
  • l = mid;
  • l = mid + 1;
  1. 关于递归函数调用,下列说法错误的是?( ) {{ select(9) }}
  • 递归调用层次过深时,可能会耗尽栈空间导致栈溢出
  • 尾递归函数可以通过编译器优化来避免栈溢出
  • 所有递归函数都可以通过循环结构来改写,从而避免栈溢出
  • 栈溢出发生时,程序会抛出异常并可以继续执行后续代码
  1. 给定n根木头,要切成不少于m段等长木段,求最大可能长度,check函数判断长度x是否可行,横线处应填写?( ) {{ select(10) }}
  • l = mid + 1; r = mid - 1;
  • l = mid - 1; r = mid + 1;
  • l = mid + 1; r = mid;
  • l = mid; r = mid + 1;

  1. 下面代码用分治求“最大连续子段和”,其时间复杂度为?( ) {{ select(11) }}
  • O(1)
  • O(n)
  • O(n log n)
  • O(n²)

  1. A组[12,35,67,89]、B组[20,45,55,78]均升序,归并合并为有序排行榜的核心循环,横线处应填入?( ) {{ select(12) }}
  • A[i] >= B[j]
  • A[i] <= B[j]
  • i >= j
  • i <= j

  1. 对已从小到大排好序的n位同学成绩,执行以第一个元素为pivot的快速排序,此次排序的时间复杂度是?( ) {{ select(13) }}
  • O(1)
  • O(n)
  • O(n log n)
  • O(n²)

  1. 下面关于排序算法的描述中,不正确的是?( ) {{ select(14) }}
  • 冒泡排序和插入排序都是稳定的排序算法
  • 快速排序和归并排序都是不稳定的排序算法
  • 冒泡排序和插入排序最好时间复杂度均为O(n)
  • 归并排序在最好、最坏和平均三种情况的时间复杂度均为O(n log n)
  1. 下面代码实现大整数(字符串表示)除以小整数(int表示),横线处应该填写?( ) {{ select(15) }}
  • rem /= b;
  • rem %= b;
  • rem = b;
  • rem = q;