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

所有 GESP 真题,手机上也能刷 · 自动判分 · 错题自动进错题本 扫码去刷
二 判断题
共 10 道 每题 2 分 共计 20 分
第 1 题

下面代码在已知结点 p 的情况下,能够以 $O(1)$ 的时间在单链表的 p 结点之后插入新结点 s 。

s->next = p->next;
p->next = s;
正确
错误
第 2 题

下面代码可以安全地删除单链表的头结点,并使 head 指向删除后的新头结点。

Node *p = head;
delete p;
head = p->next;
正确
错误
第 3 题

下面欧几里得算法既适用于 a > b ,也适用于 a < b ,只要 a 、 b 是正整数。

int gcd(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a;
}
正确
错误
第 4 题

下面埃氏筛从 i * i 开始标记,是因为 i * i 之前的 i 的合数倍数已经被更小的质因子标记过。

for (int i = 2; (long long)i * i <= n; i++) {
    if (isPrime[i]) {
        for (int j = i * i; j <= n; j += i) {
            isPrime[j] = false;
        }
    }
}
正确
错误
第 5 题

下面程序的时间复杂度为 $O(n)$。

for (int i = 1; i <= n; i *= 2) {
    cout << i << endl;
}
正确
错误
第 6 题

若数组 a 已按升序排列,下面函数能够返回最后一个小于等于 x 的元素下标;如果不存在,则返回-1 。

int findLastLE(const vector<int> &a, int x) {
    int l = 0, r = (int)a.size() - 1;
    int ans = -1;
    while (l <=  r) {
        int mid = l + (r - l) / 2;
        if (a[mid] <= x) {
            ans = mid;
            l = mid + 1;
        }  else {
            r = mid - 1;
        }
    }
    return ans;
}
正确
错误
第 7 题
快速排序中如果选取区间第一个元素作为枢轴。当输入数组已经升序排列时,其最坏时间复杂度仍为 $O(nlog n)$。
正确
错误
第 8 题
归并排序的递推式为 $T(n)=2T(n/2)+O(n)$,对应的时间复杂度为 $O(nlog n)$。
正确
错误
第 9 题

下面的贪心代码一定能对任意硬币面值集合 coins 求出 money 所需的最少硬币数。

int count = 0;
for (int coin : coins) {  // coins 按面值从大到小排列
    count += money / coin;
    money %= coin;
}
正确
错误
第 10 题

假设两个非负高精度整数分别存储在数组 a 和 b 中,且 $a≥ b$。数组采用低位在前的方式存储,即a[0] 表示个位。下面代码中的 c 可以正确保存 a - b 的各位数字。

int borrow = 0;
for (int i = 0; i < len; ++i) {
    int t = a[i] - b[i] + borrow;
    if (t < 0) {
        t += 10;
        borrow = 1;
    } else {
        borrow = 0;
    }
    c[i] = t;
}
正确
错误
判断题部分已到底了。

小程序开心码未来

微信扫码,随时随地练 GESP 真题

  • 手机刷题 · 自动判分,错题自动归档到错题本
  • 绑定网站账号后,查看答案解析等权限自动同步
开心码未来小程序二维码(微信扫一扫) 微信扫一扫