2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)_第1页
2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)_第2页
2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)_第3页
2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)_第4页
2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年9月GESP编程能力认证C++等级考试八级真题(含答案和解析)一、单选题(每题2分,共30分)。1.小杨想点一杯奶茶外卖,但还差5元起送。于是,小杨决定点一些小料。可选的小料包括:珍珠1元、椰果2元、奶冻3元、奶盖4元。每种小料最多点1份。请问共有多少种满足起送条件的点小料方案?()。A.16B.10C.9D.7答案:C。解析:求解>=5的组合共9种。如下:1+2+3=6;1+2+3+4=10;1+2+4=7;1+3+4=8;1+4=5;2+3=5;2+3+4=9;2+4=6;3+4=7。2.小杨和小刘是好朋友,她们在逛商场时发现新设置的大头贴自拍机,于是决定一起拍一组照片。一组照片包括4张,这4张照片没有顺序区分。拍每张照片时,可以选择有相框或无相框、两人可以分别选择有头饰或无头饰、还可以从2种位置(小杨在左,或小刘在左)中选出一种。她们不希望一组照片中出现完全相同的相框、头饰、位置的组合。请问一组照片共有多少种不同的方案?()。A.1820B.70C.24D.16答案:A。解析:从16个不同的元素中选出4个的组合数C(16,4)=1820。3.下列关于C++类的说法,错误的是()。A.派生类对象占用的内存总是不小于基类对象。B.派生类可以不实现基类的虚函数。C.如果一个类包含纯虚函数,则它不能包含成员变量。D.如果一个类包含纯虚函数,则不能用它定义对象。答案:C。解析:一个包含纯虚函数的类(抽象类)完全可以包含成员变量。纯虚函数仅要求派生类必须实现该函数,但并不限制抽象类本身定义成员变量。4.下列关于树和图的说法,错误的是()。A.每个连通图都存在生成树。B.每个存在生成树的有向图,都一定是强连通的。C.保留树的所有节点,并把树的每个节点指向其父节点,则可以将树转换为一个有向弱连通图。D.保留树的所有节点,并把树的每个节点指向其子节点,则可以将树转换为一个有向无环图。答案:B。解析:存在生成树的有向图不一定是强连通的。生成树仅保证图中存在一个包含所有顶点的连通子图,但强连通要求任意两顶点间存在双向路径。例如,有向树(根节点指向子节点)存在生成树,但子节点无法反向指向根节点,因此不满足强连通性。5.一对夫妻生男生女的概率相同。这对夫妻希望儿女双全。请问这对夫妻生下三个孩子时,实现儿女双全的概率是多少?()。A.1/4B.1/2C.3/4D.7/8答案:C。解析:可以用总概率减去全男和全女的概率,答案为1-(1/8)-(1/8)=(3/4)。6.二项式(x+y)6的展开式中x2y4项的系数是()。A.720B.120C.20D.15答案:D。解析:x2y4对应C(6,2)=15。7.对一个包含V个顶点、E条边的图,执行广度优先搜索,其最优时间复杂度是()。A.O(V)B.O(V+E)C.O(V2)D.O(E)答案:B。解析:邻接表存储下,BFS每个点只遍历一次,每个边只走一次,复杂度O(V+E)。8.以下关于贪心法和动态规划的说法中,错误的是()。A.动态规划能解决大部分多阶段决策问题。B.对特定的问题,贪心法不一定适用。C.当特定的问题适用贪心法时,通常比动态规划的时间复杂度更低。D.对很多问题,递推实现和递归实现动态规划方法的时间复杂度相当。答案:A。解析:适合于用动态规划方法求解的只是一类特殊的多阶段决策问题,即具有“无后效性”的多阶段决策过程。也就是说,使用动态规划求解的多阶段决策问题是有前提的。而且不是大部分多阶段决策问题都能使用动态规划。9.下面程序的输出为()。#include<iostream>usingnamespacestd;intmain(){intN=15,cnt=0;for(intx=1;x+x+x<=N;x++)for(inty=x;x+y+y<=N;y++)for(intz=y;x+y+z<=N;z++)cnt++;cout<<cnt<<endl;return0;}A.45B.102C.174D.3375答案:B。解析:将z进行上下界统计,当x和y固定时,z有N-x-2*y+1=16-x-2*y种方案,通过枚举发现规律,如下表。10.下面程序的时间复杂度为()。intprimes[MAXP],num=0;boolisPrime[MAXN]={false};voidsieve(){for(intn=2;n<=MAXN;n++){if(!isPrime[n])primes[num++]=n;for(inti=0;i<num&&n*primes[i]<=MAXN;i++){isPrime[n*primes[i]]=true;if(n%primes[i]==0)break;}}}A.O(nlogn)B.O(nloglogn)C.O(n)D.O(logn)答案:C。解析:欧拉线性筛,复杂度O(n)。11.下列Dijkstra算法,假设图graph中顶点数v、边数e,则程序的时间复杂度为()。typedefstructEdge{intin,out;//从下标in顶点到下标out顶点的边。intlen;//边长度。structEdge*next;}Edge;//v顶点个数,graph出边邻接表,start起点下标,dis输出每个顶点的最短距离。voiddijkstra(intv,Edge*graph[],intstart,int*dis){constintMAX_DIS=0x7fffff;for(inti=0;i<v;i++)dis[i]=MAX_DIS;dis[start]=0;int*visited=newint[v];for(inti=0;i<v;i++)visited[i]=0;visited[start]=1;for(intt=0;;t++){intmin=MAX_DIS,minv=-1;for(inti=0;i<v;i++){if(visited[i]==0&&min>dis[i]){min=dis[i];minv=i;}}if(minv<0)break;visited[minv]=1;for(Edge*e=graph[minv];e!=NULL;e=e->next)if(dis[e->out]>e->len)dis[e->out]=e->len;}delete[]visited;}A.O(v2)B.O(vlogv+e)C.O((v+e)logv)D.O(v+e)答案:A。解析:dijkstra在矩阵存图的情况下复杂度为O(V2)。12.下面count_triple函数的时间复杂度为()。intgcd(intm,intn){if(m==0)returnn;returngcd(n%m,m);}intcount_triple(intn){intcnt=0;for(intv=1;v*v*4<=n;v++)for(intu=v+1;u*(u+v)*2<=n;u+=2)if(gcd(u,v)==1){inta=u*u-v*v;intb=u*v*2;intc=u*u+v*v;cnt+=n/(a+b+c);}returncnt;}A.O(n2)B.O(n2logn)C.O(n)D.O(nlogn)答案:D。解析:最外层v的复杂度为O(sqrt(n)),对内层u,此时v看作常数,复杂度为sqrt(n)级别,gcd的复杂度为log(n)级别,总体复杂度O(nlogn)。13.下面merge_sort函数试图实现归并排序算法,横线处应该填入的是()。#include<vector>usingnamespacestd;voidmerge_sort(vector<int>&arr,intleft,intright){if(right-left<=1)return;intmid=(left+right)/2;merge_sort(________);//在此处填入选项。merge_sort(________);//在此处填入选项。vector<int>temp(right-left);inti=left,j=mid,k=0;while(i<mid&&j<right)if(arr[i]<=arr[j])temp[k++]=arr[i++];elsetemp[k++]=arr[j++];while(i<mid)temp[k++]=arr[i++];while(j<right)temp[k++]=arr[j++];for(i=left,k=0;i<right;++i,++k)arr[i]=temp[k];}A.arr,left,midarr,mid,rightB.arr,left,mid+1arr,mid+1,rightC.arr,left,midarr,mid+1,rightD.arr,left,mid+1arr,mid+1,right+1答案:A。解析:根据题目,在分治的分阶段,填写左右子区间的端点,程序中right是个开区间,所以两个子区间原本是[Left,mid-1],[mid,right-1],由于右端点为开区间,因此程序中的形参区间为[Left,mid),[mid,right)。14.下面Prim算法程序中,横线处应该填入的是()。#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intprim(vector<vector<int>>&graph,intn){vector<int>key(n,INT_MAX);vector<int>parent(n,-1);key[0]=0;for(inti=0;i<n;i++){intu=min_element(key.begin(),key.end())-key.begin();if(key[u]==INT_MAX)break;for(intv=0;v<n;v++){if(__________){//在此处填入选项。key[v]=graph[u][v];parent[v]=u;}}}intsum=0;for(inti=0;i<n;i++){if(parent[i]!=-1){cout<<"Edge:"<<parent[i]<<"-"<<i<<"Weight:"<<key[i]<<endl;sum+=key[i];}}returnsum;}intmain(){intn,m;cin>>n>>m;vector<vector<int>>graph(n,vector<int>(n,0));for(inti=0;i<m;i++){intu,v,w;cin>>u>>v>>w;graph[u][v]=w;graph[v][u]=w;}intresult=prim(graph,n);cout<<"Totalweightoftheminimumspanningtree:"<<result<<endl;return0;}A.graph[u][v]>=0&&key[v]>graph[u][v]B.graph[u][v]<=0&&key[v]>graph[u][v]C.graph[u][v]==0&&key[v]>graph[u][v]D.graph[u][v]!=0&&key[v]>graph[u][v]答案:D。解析:prim算法,该程序中用graph[x][y]是否为0表示x和y之间是否存在边权,程序的位置为更新最小生成树的圈外的点v到圈的距离能否通过u更新,即graph[u][v]<key[v],则更新key[v]。15.下面的程序使用出边邻接表表达的带权无向图,则从顶点0到顶点3的最短距离为()。#include<vector>usingnamespacestd;classEdge{public:intdest;intweight;Edge(intd,intw):dest(d),weight(w){}};classGraph{private:intnum_vertex;vector<vector<Edge>>vve;public:Graph(intv):num_vertex(v),vve(v){}voidaddEdge(ints,intd,intw){vve[s].emplace_back(d,w);vve[d].emplace_back(s,w)}};intmain(){Graphg(4);g.addEdge(0,1,8);g.addEdge(0,2,5);g.addEdge(1,2,1);g.addEdge(1,3,3);g.addEdge(2,3,7);return0;}A.12B.11C.10D.9答案:D。解析:根据题目要求画图,得到0-2-1-3为最短路径,边权和为9。二、判断题(每题2分,共20分)。16.题C++语言中,表达式'9'^3的结果值为'999'。()。答案:错误。解析:字符9的ASCII码为57和3异或,结果为58,且‘999’的写法错误。17.下列C++语言代码,能够安全地输出arr[5]的值。()。intn=5;intarr[n]={1,2,3};std::cout<<arr[5];答案:错误。解析:arr[5]的下标为0~4,并不包括5,输出arr[5]会导致数组越界访问。18.对n个元素的数组进行排序,最差情况的时间复杂度为O(n2)。()。答案:错误。解析:每个排序算法都有自己的最差情况的时间复杂度。尽管常见的算法中,最差情况的时间复杂度为O(n^2)(例如选择排序、插入排序等),但仍存在比O(n^2)慢得多的排序算法(例如猴子排序、臭皮匠排序等)。19.有4个红球、3个蓝球和2个绿球排成一排(相同色球视为完全相同),则不同的排列方案数为1260种。()。答案:正确。解析:由排列组合公式,答案为9!/(2!*3!*4!)=1260种。20.使用math.h或cmath头文件中的函数,对于int类型的变量x,表达式fabs(x)和sqrt(x*x)的结果总是近似相等的。()。答案:错误。解析:fabs(x)是求解浮点数x的绝对值,sqrt(x*x)是将x开平方后再开根号;但是先开平方会容易溢出,当x>=46341时,x*x就会溢出int出现负数,这个时候会导致sqrt()返回值异常。21.运算符重载是C++语言静态多态的一种典型体现,而使用C语言则无法实现运算符重载。()。答案:正确。解析:而C语言作为面向过程的编程语言,其设计不支持函数重载和运算符重载。C语言要求同一作用域中不能存在相同的标识符,因此无法实现运算符重载功能。22.存在一个简单无向图满足:顶点数为6,边数为8,6个顶点的度数分别为3、3、3、3、2、2。()。答案:正确。解析:根据题意,存在这样的简单无向图。23.已知两个double类型的变量r和theta分别表示一个扇形的圆半径及圆心角(弧度),则扇形的周长可以通过表达式(2+theta)*r求得。()。答案:正确。解析:弧长公式为L=r*theta直径为2*r总周长为(2+theta)*r。24.题Dijkstra算法的时间复杂度为O(V2),其中V为图中顶点的数量。()。答案:错误。解析:如果使用邻接表存储+堆优化,则复杂度为O((V+W)logV)。25.从32名学生中选出2人分别担任男生班长和女生班长(男生班长必须是男生,女生班长必须是女生),则共有C(32,2)/2种不同的选法。()。答案:错误。解析:题目并没有说明有多少男生多少女生,因此无法计算。三、编程题(每题25分,共50分)。26.试题名称:最短距离。时间限制:1.0s。内存限制:512.0MB。题目描述:给定正整数p,q以及常数N=1018。现在构建一张包含N个结点的带权无向图,结点依次以1,2……N编号。对于任意满足1≤u<v≤N的u,v,向图中加入一条连接结点u与结点v的无向边,边权取决于u,v是否互质。(1)若u,v互质(即u,v的最大公因数为1),则连接结点u与结v的无向边长度为p。(2)否则连接结点u与结点v的无向边长度为q。现在给定n组询问,第i(1≤i≤n)组询问给定两个正整数ai,bi,你需要回答结点ai与结点bi之间的最短距离。输入格式:第一行n,p,q,三个正整数,分别表示询问数量,结点编号互质时的边权,以及结点编号不互质时的边权。接下来n行,每行两个正整数ai,bi,表示一组询问。输出格式:输出共n行,每行一个整数,表示结点ai与结点bi之间的最短距离。数据范围:对于30%的测试点,保证1≤n≤10,1≤ai,bi≤50。对于另外30%的测试点,保证1≤ai,bi≤250。对于所有测试点,保证1≤n≤104,1≤ai,bi≤109,1≤p,q≤109。参考程序。#include<algorithm>#include<cstdio>usingnamespacestd;constintN=1e5+5;intn,p,q;inta,b;intans;intgcd(inta,intb){if(!a||!b)returna+b;returngcd(b,a%b);}intmain(){scanf("%d%d%d",&n,&p,&q);while(n--){scanf("%d%d",&a,&b);if(a==b)ans=0;elseif(a==1||b==1)ans=p;else{ans=min(p+p,q+q);if(gcd(a,b)==1)ans=min(ans,p);elseans=min(ans,q);}printf("%d\n",ans);}return0;}解析:①若x==y则答案为0。②如果gcd(x,y)==1,可以直接变换,代价为p,也可以选择x≠1且y≠1时将x变为lcm(x,y)*m再变为y,代价为2*q,但是需要满足1<=m,且lcm(x,y)*m<=1e18。③若gcd(x,y)!=1。则可以将x变为m再变为y,代价为2*p,但是需要满足gcd(x,m)==1且gcd(y,m)==1。27.试题名称:最小生成树。时间限制:1.0s。内存限制:512.0MB。题目描述:给定一张包含n个结点m条边的带权连通无向图,结点依次以1,2……n编号,第i条边(1≤i≤m)连接结点ui与结点vi,边权为wi。对于每条边,请你求出从图中移除该条边后,图的最小生成树中所有边的边权和。特别地,若移除某条边后图的最小生成树不存在,则输出-1。输入格式:第一行,两个正整数n,m,分别表示图的结点数与边数。接下来m行中的第i行(1≤i≤m)包含三个正整数ui,vi,wi,表示图中连接结点ui与结点vi的边,边权为wi。输出格式:输出共m行,第i行(1≤i≤m)包含一个整数,表示移除第i条边后,图的最小生成树中所有边的边权和。若移除第i条边后图的最小生成树不存在,则输出-1。数据范围。对于所有测试点,保证1≤n≤105,1≤m≤105,1≤ui,vi≤n,1≤wi≤109。参考程序。#include<cstdio>#include<algorithm>usingnamespacestd;constintN=1e5+5;constintM=2e5+5;constlonglongoo=1e18;intn,m;intu[M],v[M],w[M],p[M];inth[N],id[M],nx[M],et;intf[N],mark[M];longlongs,ans[M];intdep[N],pid[N];boolcmp(intx,inty){returnw[x]<w[y];}intgetf(intu){returnf[u]?f[u]=getf(f[u]):u;}voidlink(intx,intp){id[++et]=p;nx[et]=h[x];h[x]=et;}voiddfs(intx,intf=0,intp=0){dep[x]=dep[f]+1;pid[x]=p;for(inti=h[x];i;i=nx[i]){intto=u[id[i]]^v[id[i]]^x;if(to!=f)dfs(to,x,id[i]);}}intmain(){scanf("%d%d",&n,&m);for(inti=1;i<=m;i++){scanf("%d%d%d",&u[i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论