#287. GESP2025121五级选择题

GESP2025121五级选择题

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

  1. 循环单链表的printList遍历输出函数,横线处应填写( )? {{ select(1) }}
  • while (p != nullptr) { cout << p->data << " "; p = p->next; }
  • while (p->next != nullptr) { cout << p->data << " "; p = p->next; }
  • do { cout << p->data << " "; p = p->next; } while (p != head);
  • for (; p; p=p->next) { cout << p->data << " "; }

  1. 区块链添加新区块的addBlock函数,横线处应填写( )? {{ select(2) }}
  • Block* newBlock = new Block(tail->index + 1, data, tail); tail = newBlock->prev;
  • Block* newBlock = new Block(tail->index + 1, data, tail); tail = newBlock;
  • Block* newBlock = new Block(tail->index + 1, data, tail->prev); tail = newBlock;
  • Block* newBlock = new Block(tail->index + 1, data, tail->prev); tail = newBlock->prev;

  1. 关于单链表和双链表删除指定节点的描述,正确的是( )? {{ select(3) }}
  • 双链表删除指定节点是 (O(1)),单链表是 (O(1))
  • 双链表删除指定节点是 (O(n)),单链表是 (O(1))
  • 双链表删除指定节点是 (O(1)),单链表是 (O(n))
  • 双链表删除指定节点是 (O(n)),单链表是 (O(n))

  1. 已知 (a=38) 和 (b=14) 对模m同余((a \equiv b) (mod m)),以下哪个值不可能是m?( ) {{ select(4) }}
  • 3
  • 4
  • 6
  • 9
  1. 关于欧几里得算法的gcd1(递归)和gcd2(迭代)函数,说法错误的是( )? {{ select(5) }}
  • gcd1() 实现为递归方式
  • gcd2() 实现为迭代方式
  • 当数值较大时,gcd1() 需要较多额外辅助空间
  • 当数值较大时,gcd1() 的执行效率比 gcd2() 更高

  1. 唯一分解定理描述的内容是( )? {{ select(6) }}
  • 任何正整数都可以表示为两个素数的和
  • 任何大于1的合数都可以唯一分解为有限个质数的乘积
  • 两个正整数的最大公约数等于它们的最小公倍数除以乘积
  • 所有素数都是奇数
  1. 线性筛法的linear_sieve函数,横线处应填的代码是( )? {{ select(7) }}
  • for (int j = 0; j < primes.size() && i * primes[j] <= n; j++)
  • for(int j = sqrt(n); j <= n && i * primes[j] <= n; j++)
  • for (int j = 1; j <= sqrt(n); j++)
  • for(int j = 1; j < n && i * primes[j] <= n; j++)

  1. 下列关于排序的说法,正确的是( )? {{ select(8) }}
  • 快速排序是稳定排序
  • 归并排序通常是稳定的
  • 插入排序是不稳定排序
  • 冒泡排序不是原地排序
  1. 关于归并排序的说法,不正确的是( )? {{ select(9) }}
  • 归并排序的平均复杂度是 (O(n log n))
  • 归并排序需要 (O(n)) 的额外空间
  • 归并排序在最坏情况的时间复杂度是 (O(n^2))
  • 归并排序适合大规模数据

  1. 以首元素为基准的快速排序算法,最坏情况的时间复杂度是( )? {{ select(10) }}
  • (O(n))
  • (O(log n))
  • (O(n^2))
  • (O(n log n))

  1. 在有序数组中查找第一个大于等于x的元素位置的lower_bound函数,说法正确的是( )? {{ select(11) }}
  • 上述代码逻辑正确
  • 上述代码逻辑错误,while循环条件应该用l<=r
  • 上述代码逻辑错误,mid计算错误
  • 上述代码逻辑错误,边界条件不对

  1. 二分法查找木头切割最小x的binary_cut函数,横线处应填写( )? {{ select(12) }}
  • if (check(L, K, mid)) { r=mid; } else { l=mid+1; }
  • if (check(L, K, mid)) { r=mid+1; } else { l=mid+1; }
  • if (check(L, K, mid)) { r=mid+1; } else { l=mid-1; }
  • if (check(L, K, mid)) { r=mid+1; } else { l=mid; }

  1. 关于阶乘计算的factorial1(递归)和factorial2(迭代)函数,说法正确的是( )? {{ select(13) }}
  • 两种实现方式的时间复杂度相同,都为 (O(n))
  • 两种实现方式的空间复杂度相同,都为 (O(n))
  • 两种实现方式的空间复杂度相同,都为 (O(1))
  • factorial1()的时间复杂度为 (O(2^n)),factorial2()的时间复杂度为 (O(n))

  1. 按利润贪心选择任务的maxProfit函数,横线处应填写( )? {{ select(14) }}
  • slot[t] = true; totalProfit += task.profit;
  • slot[t] = false; totalProfit += task.profit;
  • slot[t] = true; totalProfit = task.profit;
  • slot[t] = false; totalProfit = task.profit;

  1. 数组低位在前的高精度加法add函数,横线处应填写( )? {{ select(15) }}
  • c.push_back(carry / 10); carry %= 10;
  • c.push_back(carry % 10); carry /= 10;
  • c.push_back(carry % 10);
  • c.push_back(carry); carry /= 10;