2025年12月CCF GESP C++五级单选题(共15题,每题2分,满分30分)
- 循环单链表的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 << " "; }

- 区块链添加新区块的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;

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

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

- 唯一分解定理描述的内容是( )?
{{ select(6) }}
- 任何正整数都可以表示为两个素数的和
- 任何大于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++)

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

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

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

- 二分法查找木头切割最小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; }

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

- 按利润贪心选择任务的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;

- 数组低位在前的高精度加法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;
