CCF GESP 2026年6月认证 C++ 5级

判断题
共 10 道 每题 2 分 共计 20 分
第 1 题
数组的存储空间在物理上通常是连续的,而链表的结点可以存储在不连续的内存空间中。
正确
错误
第 2 题
带哨兵头尾节点的双向循环链表,在表头插入节点 p,以下四步操作无论什么顺序执行结果都正确。
① p->next = head->next;
② p->prev = head;
③ head->next->prev = p;
④ head->next = p;
正确
错误
第 3 题
对任意正整数 ab,以下两种写法的 gcd 函数返回值完全相同。
int gcd1(int a, int b) {
    return b ? gcd1(b, a % b) : a;
}

int gcd2(int a, int b) {
    while (b) {
        int t = b;
        b = a % b;
        a = t;
    }
    return a;
}
正确
错误
第 4 题
在归并排序的合并操作中,如下代码片段可以正确地将两个已排序的子数组 LR 合并回原数组 arr 中。
void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;
    vector<int> L(n1), R(n2);
    for (int i = 0; i < n1; i++) L[i] = arr[left + i];
    for (int j = 0; j < n2; j++) R[j] = arr[mid + 1 + j];
    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (L[i] <= R[j]) arr[k++] = L[i++];
        else arr[k++] = R[j++];
    }
    while (i < n1) arr[k++] = L[i++];
    while (j < n2) arr[k++] = R[j++];
}
正确
错误
第 5 题
分治法通常将一个规模较大的问题拆分为若干个规模较小、结构相似的子问题,分别求解后再合并子问题的结果。
正确
错误
第 6 题
贪心算法只要每一步选择当前最优解,就一定能得到全局最优解。
正确
错误
第 7 题
二分查找不仅可以应用于有序数组,也可以在不增加时间复杂度的情况下应用于有序的单链表,因为链表也支持 $O(1)$ 时间内的随机访问。
正确
错误
第 8 题
以下函数 f1 的时间复杂度比函数 f2 的更高。
void f1(int n) {
    for (int i = 1; i < n; i *= 2);
}

void f2(int n) {
    if (n <= 1) return;
    f2(n - 1);
    f2(n - 1);
}
正确
错误
第 9 题
唯一分解定理表明,任何一个大于 $1$ 的自然数都可以唯一地分解为若干个质数的乘积,如果不考虑质因数的顺序,这种分解方式是唯一的。
正确
错误
第 10 题
归并排序和快速排序在平均情况下的时间复杂度均为 $O(nlog n)$。但在稳定性方面,归并排序通常是不稳定的,而快速排序是稳定的。
正确
错误
判断题部分已到底了。