2026年06月GESPC++五级真题解析(含视频)
视频讲解:GESP2026年6月五级C++真题讲解
一、单选题
第1题

解析:
答案B,
头结点后插入新结点,newNode->next=head->next
头结点还需要更新head->next=newNode
第2题

解析:
答案C,横向处需要循环链表,p一开始为head,所以p的next不为空就继续循环,即p->next != nullptr
第3题

解析:
答案A,如下图所示

第4题

解析:
答案B,
模拟辗转相除过程
105/45=2...15
45/15=3...0
15/0
第5题

解析:
答案A,线性筛根据最小的质因数筛选,一旦i能被primes整除,后面都不需要标记了
第6题

解析:
答案B,埃筛就是通过质数的倍数标记不是质数
第7题

解析:
答案C,2^6 分为 2^3 * 2^3 ,2^3分为 2^1 * 2^1 * 2^1 ,即分治的思想
第8题

解析:
答案C,
40/2=20
20/2=10
10/2=5
只能整除3次
第9题

解析:
答案C,当条件满足时,往更小去找,但是不能舍弃当前的mid,即r=mid
第10题

解析:
答案B,当条件满足时,往更小去找,但是不能舍弃当前的mid,即r=mid
第11题

解析:
答案B,把基准元素放到中间,i不断++直到为中间,即low 和 i 做交换
第12题

解析:
答案B,归并排序类似两队汇军,两个队伍排好序,再合并排序
第13题

解析:
答案A,需要两两合并,即n-1
第14题

解析:
答案C,如果能合并,两边都需要向内收
第15题

解析:
答案A,当不够减,要借位,借1个,等于借10,即a[i]+=10
二、判断题
第1题

解析:
答案√,描述正确
第2题

解析:
答案×,head->next->prev=p,导致p的prev指向自己
第3题

解析:
答案√,一种是递归,一种是while实现
第4题

解析:
答案√,代入数据,代码无误
第5题

解析:
答案√,这就是分治的过程
第6题

解析:
答案×,贪心是获取局部的最优,最后不一定能获取到全局最优
第7题

解析:
答案×,链表不支持O(1)查找
第8题

解析:
答案×,f1递推 复杂度更低
第9题

解析:
答案√,这就是唯一分解定理的表述
第10题

解析:
答案×,只有选择排序 快速排序 希尔排序 堆排序 是不稳定的
三、编程题
第1题 [GESP202606 五级] 排排坐
题目描述
老师正在和小朋友们分糖果。
小朋友们先在自己的手上写一个数字,然后坐成一排。
老师分发糖果的规则是:每个小朋友获得自己以及左侧所有小朋友的手上数字之和个糖果。
现在小朋友们都已经在自己手上写上了数字。
请帮小朋友们安排合适的座位顺序,使得小朋友们分到的糖果总量最大,输出这个最大值。
输入格式
输入 2 行,
第一行为一个正整数 n,表示小朋友的个数;
第二行为 n 个正整数 a1,a2,⋯,an,表示小朋友们手上的数字,整数之间以空格分隔。
输出格式
输出一个整数,表示小朋友们可能分到的最大糖果总数量。
输入输出样例
输入 #1
5
7 5 8 9 3
输出 #1
111
说明/提示
样例解释
小朋友安排座位后从左向右每人手上数字依次是:9,8,7,5,3。
这时可以得到最多的糖果:(9)+(9+8)+(9+8+7)+(9+8+7+5)+(9+8+7+5+3)=111。
数据范围
1≤n≤1000,1≤ai≤1000。
答案
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
//1)填充数据
int n;cin>>n;
int a[1005]={};
for(int i=1;i<=n;i++) cin>>a[i];
//2)排序
sort(a+1,a+n+1,cmp);
//3)计算前缀和
long long pre_sum[1005]={},ans=0;
for(int i=1;i<=n;i++){
pre_sum[i]=a[i]+pre_sum[i-1];
//4)累加所有前缀和
ans+=pre_sum[i];
}
cout<<ans;
return 0;
}
第2题 [GESP202606 五级] 晚宴
题目描述
小明去参加晚宴。晚宴中有 n 个菜肴,每个菜肴都有一个美味度,第 i 个菜肴的美味度为 vi。
晚宴规定小明只能恰好选取两道菜肴,并且这两道菜肴的美味度必须要互质(即最大公约数为 1)。
请帮助小明选取两道菜肴,使得两道菜肴美味度之和最大。
输入格式
输入 2 行,
第一行为一个正整数 n,表示菜肴的个数;
第二行为 n 个整数 v1,v2,⋯,vn 表示菜肴的美味度,整数之间以空格分隔。
输出格式
输出一个整数,表示两道互质菜肴美味度之和的最大值。
输入输出样例
输入 #1
5
3 5 7 35 105
输出 #1
38
说明/提示
样例解释 1
最优选择是 3 和 35。
注意到,105 与其他任意菜肴的最大公约数都大于 1,因此无法参与合法选择。
数据范围
2≤n≤1000, 1≤vi≤1000000。
数据保证不存在相同美味度的菜肴。
数据保证至少存在一种选取两道菜肴的方案。
答案
#include<bits/stdc++.h>
using namespace std;
int main(){
//1)填充数据
int n;cin>>n;
int a[1005]={};
for(int i=1;i<=n;i++) cin>>a[i];
//2)枚举所有组合
int ans=INT_MIN;
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
//3)判断是否互质
if( __gcd(a[i],a[j]) ==1 ){
//4)找最大值
if(ans<a[i]+a[j]){
ans=a[i]+a[j];
}
}
}
}
cout<<ans;
return 0;
}
更多推荐


所有评论(0)