题号 1 2 3 4 5 6 7 8 9 10 11 1 2 13 14 15
答 案 B A A B C C A D B C A B B A A
C ++ 五级
2024 年 0 3 ⽉
1 单选题(每题 2 分,共 30 分)
第 1 题 唯 ⼀分解定理描述的内容是( )?
A. 任 意整数都可以分解为素数的乘积
B. 每 个合数都可以唯⼀分解为⼀系列素数的乘积
C. 两 个不同的整数可以分解为相同的素数乘积
D. 以 上都不对
第 2 题 贪 ⼼算法的核⼼思想是( )?
A. 在 每⼀步选择中都做当前状态下的最优选择
B. 在 每⼀步选择中都选择局部最优解
C. 在 每⼀步选择中都选择全局最优解
D. 以 上都对
第 3 题 下 ⾯的 C ++ 代码⽚段⽤于计算阶乘。请在横线处填⼊( ),实现正确的阶乘计算。
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);
第 4 题 下 ⾯的代码⽚段⽤于在双向链表中删除⼀个节点 。请在横线处填⼊( ),使其能正确实现相应功能。
int factorial (int n) {
if ( n == 0 || n == 1) {
return 1;
} else {
_________________________________ // 在此处填入代码
}
}
1
2
3
4
5
6
7
void deleteNode (DoublyListNode *& head , int value ) { 1
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;
第 5 题 辗 转相除法也被称为( )
A. ⾼ 斯消元法
B. 费 马定理
C. 欧 ⼏⾥德算法
D. ⽜ 顿迭代法
第 6 题 下 ⾯的代码⽚段⽤于计算斐波那契数列。该代码 的时间复杂度是( )?
A.
B.
C .
D.
第 7 题 下 ⾯的代码⽚段⽤于将两个⾼精度整数进⾏相加 。请在横线处填⼊( ),使其能正确实现相应功能。
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 ;
}
}
2
3
4
5
6
7
8
9
1 0
11
12
13
14
15
16
17
int fibonacci (int n) {
if ( n <= 1) {
return n;
} else {
return fibonacci (n - 1) + fibonacci (n - 2);
}
}
1
2
3
4
5
6
7
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 题 给 定序列: 1 , 3 , 6 , 9 , 17 , 31 , 39 , 52 , 61 , 79 , 81 , 90 , 96 。使⽤以下代码进⾏⼆分查找查找元素 8 2
时 ,需要循环多少次,即最后输出的 t im es 值为( )。
A. 2
B . 5
C . 3
D . 4
第 9 题 下 ⾯的代码⽚段⽤于判断⼀个正整数是否为素数 。请对以下代码进⾏修改,使其能正确实现相应功能。( )
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 ;
}
1
2
3
4
5
6
7
8
9
1 0
11
12
13
int binarySearch (const std::vector <int >& 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
GESP 3月认证C++五级真题,2024年3月GESP等级认证C++编程五级真题及答案