理论卷2024年3月GESP等级认证(C++) · 五级

GESP C++ 5级 2024.03

满分 100 · 及格 60 · 时长 60 分钟 · 共 27 题 (单选15 / 判断10 / 编程题2)
试卷阅览 · 免费预览前 10 题 · 交卷后可查看答案与解析
1
单选题号 #12510
分值 2

唯一分解定理描述的内容是

A

任意整数都可以分解为素数的乘积

B

每个合数都可以唯一分解为一系列素数的乘积

C

两个不同的整数可以分解为相同的素数乘积

D

以上都不对

2
单选题号 #12511
分值 2

给定序列:1,3,6,9,17,31,39,52,61,79,81,90,96。使用以下代码进行二分查找查找元素 82时,需要循环多少次,即最后输出的 times 值为

int binarySearch(const std::vector& arr, int target) {
 int left = 0;
 int right = arr.size() - 1;
 int times = 0;
 while (left <= right) {
 times ++;
 int mid = left + (right - left) / 2;
 if (arr[mid] == target) {
 cout << times << endl;
 return mid;
 } else if (arr[mid] < target) {
 left = mid + 1;
 } else {
 right = mid - 1;
 }
 }
 cout << times << endl;
 return -1;
}
A

2

B

5

C

3

D

4

3
单选题号 #12512
分值 2

贪心算法的核心思想是

A

在每一步选择中都做当前状态下的最优选择

B

在每一步选择中都选择局部最优解

C

在每一步选择中都选择全局最优解

D

以上都对

4
单选题号 #12513
分值 2

下面的 C++ 代码片段用于计算阶乘。请在横线处填入( ),实现正确的阶乘计算。

int factorial(int n) {
 if (n == 0 || n == 1) {
 return 1;
 } else {
 _________________________________ // 在此处填入代码
 }
}
A

return n * factorial(n - 1);

B

return factorial(n - 1) / n;

C

return n * factorial(n);

D

return factorial(n / 2) * factorial(n / 2);

5
单选题号 #12514
分值 2

下面的代码片段用于在双向链表中删除一个节点。请在横线处填入( ),使其能正确实现相应功能。

void deleteNode(DoublyListNode*& head, int value) {
 DoublyListNode* current = head;
 while (current != nullptr && current->val != value) {
 current = current->next;
 }
 if (current != nullptr) {
 if (current->prev != nullptr) {
 ___________________________________ // 在此处填入代码
 } else {
 head = current->next;
 }
 if (current->next != nullptr) {
 current->next->prev = current->prev;
 }
 delete current;
 }
}
A

if (current->next != nullptr) current->next->prev = current->prev;

B

current->prev->next = current->next;

C

delete current->next;

D

current->prev = current->next;

6
单选题号 #12515
分值 2

辗转相除法也被称为

A

高斯消元法

B

费马定理

C

欧几里德算法

D

牛顿迭代法

7
单选题号 #12516
分值 2

下面的代码片段用于将两个高精度整数进行相加。请在横线处填入( ),使其能正确实现相应功能。

string add(string num1, string num2) {
 string result;
 int carry = 0;
 int i = num1.size() - 1, j = num2.size() - 1;
 while (i >= 0 || j >= 0 || carry) {
 int x = (i >= 0) ? num1[i--] - '0' : 0;
 int y = (j >= 0) ? num2[j--] - '0' : 0;
 int sum = x + y + carry;
 carry = sum / 10;
 _______________________________________
 }
 return result;
}
A

result = to_string(sum % 10) + result;

B

result = to_string(carry % 10) + result;

C

result = to_string(sum / 10) + result;

D

result = to_string(sum % 10 + carry) + result;

8
单选题号 #12517
分值 2

下面的代码片段用于计算斐波那契数列。该代码的时间复杂度是

int fibonacci(int n) {
 if (n <= 1) {
 return n;
 } else {
 return fibonacci(n - 1) + fibonacci(n - 2);
 }
}
A

O(1)O(1)

B

O(n)O(n)

C

O(2n)O(2^n)

D

O(logn)O(logn)

9
单选题号 #12518
分值 2

下面的代码片段用于判断一个正整数是否为素数。请对以下代码进行修改,使其能正确实现相应功能。

bool isPrime(int num) {
 if (num < 2) {
 return false;
 }
 for (int i = 2; i * i < num; ++i) {
 if (num % i == 0) {
 return false;
 }
 } 
 return true;
}
A

num < 2 应该改为 num <= 2

B

循环条件 i * i < num 应该改为 i * i <= num

C

循环条件应该是 i <= num

D

循环体中应该是 if (num % i != 0)

10
单选题号 #12519
分值 2

在埃拉托斯特尼筛法中,要筛选出不大于 n 的所有素数,最外层循环应该遍历什么范围

vector sieveOfEratosthenes(int n) {
 std::vector isPrime(n + 1, true);
 std::vector primes;
 _______________________ {
 if (isPrime[i]) {
 primes.push_back(i);
 for (int j = i * i; j <= n; j += i) {
 isPrime[j] = false;
 }
 }
 }
 for (int i = sqrt(n) + 1; i <= n; ++i) {
 if (isPrime[i]) {
 primes.push_back(i);
 }
 }
 return primes;
}
A

for (int i = 2; i <= n; ++i)

B

for (int i = 1; i < n; ++i)

C

for (int i = 2; i <= sqrt(n); ++i)

D

for (int i = 1; i <= sqrt(n); ++i)

🔒

已解锁前 10 题

第 11~27 题(共 17 题)可在考试中作答
本卷为普通试卷:注册用户每题扣 1 积分(每日登录送 30 体验积分),交卷后查看答案与解析
海小星AI平台海小星AI平台

点亮AI梦想,编程未来之星。专业的青少年AI编程教育平台。

课程方向

  • AIGC人工智能
  • Scratch图形化
  • Python编程
  • C++/NOIP竞赛

联系我们

  • 北京市西城区万博苑7号楼3层F28室
  • +86-010-83553010
  • contact@seanova.cn

© 2026 海小星AI平台|京ICP备2022032747号

隐私政策服务条款