2025年06月GESPC++三级真题解析(含视频)
视频讲解:GESP2025年6月三级C++真题讲解
一、单选题
第1题
解析:
答案A,原码最小的整数是1111 1111(-127),若是补码,则最小的整数是-128,因为1000 0000是-128的补码
第2题
解析:
答案B,反码0000 0000或1111 1111都表达0
第3题
解析:
答案A,
补码 1011 1011,减一变反码
反码 1011 1010,除了符号位,其他取反变原码
原码 1100 0101,转二进制-(1*+1*
+1*
)= -(64+4+1)= -69
第4题
解析:
答案A,
符号位为0,原码和补码相同,即原码为0000 1010
第5题
解析:
答案A,
转十进制
=1* + 1*
+ 0*
+ 1*
+ 1*
+ 0*
+ 1*
=8+4+0+1+0.5+0+0.125
=13.625
第6题
解析:
答案B,
0 1 1 1 1 1 1 1 (+127,符号位是第7位:0)
+ 0 0 0 0 0 0 0 1 (+1,符号位是第7位:0)
-----------------------------1 0 0 0 0 0 0 0
最高位第7位的进位为0,次高位第6位的进位为1,进位不同,发生了“上位溢出”
第7题
解析:
答案A,
八进制转十进制
3*+5*
+6*
=3*8+5+1+6*0.125
=29.75
第8题
解析:
答案B,|运算,只要其中一个为1,结果为1
1010
|1100
-------1110
第9题
解析:
答案A,
第10题
解析:
答案D,
A写法有误,应为:int* array = new int[5];
B没有这种写法
C写法有误,应为:int[] array = {1,2,3,4,5};
D正确
第11题
解析:
答案B,
假设i:123
i/10将十位变成个位 123/10=12
i%10获取当前个位 12%10=2
即(i/10)%10
第12题
解析:
答案B,
_______________ // 累加当前落下高度 即 distance += height;height /= 2; //跳跃高度减半
distance += height; //累加 “减半跳跃高度”
第13题
解析:
答案D,
GBK编码:中文占2字节,其他占1字节,也就是 (2中文)*2+(4字母)*1字节=8字节
UTF-8编码:中文占3字节,其他占1字节,也就是 (2中文)*3+(4字母)*1字节=10字节
第14题
解析:
答案C,
s.rfind(“e”)表示在s字符串,反向寻找第一次出现字符串“e”的位置
G e s p T e s t
0 1 2 3 4 5 6 7 8
反向寻找第一个e在位置6
第15题
解析:
答案C,
4个英文字符+2个中文字符=6字符
二、判断题
第1题
解析:
答案×,比较的是内容,而不是地址
第2题
解析:
答案√,substr(起点,数量)
第3题
解析:
答案√×,浮点数不支持位运算 (>>,<<,^,&,|,~)
第4题
解析:
答案√,括号不影响字符串的判断
第5题
解析:
答案×,set内的元素不能通过地址修改,只能通过内置函数
#include <iostream>
#include <set>
using namespace std;int main() {set<int> s = {1, 2, 3};// 1. 找到并删除旧元素int old_val = 2;s.erase(old_val); // 删除元素 2// 2. 插入新元素int new_val = 10;s.insert(new_val); // 插入元素 10// 遍历结果:1 3 10(保持有序)for (int num : s) {cout << num << " ";}return 0;
}
第6题
解析:
答案√,
假设x:111(十进制7)111
&001
---------001
通过例子可知,只要第1位二进制数是1,代表是奇数
第7题
解析:
答案×,长度不足会获取到最后一位就停下来
string s="123456789";
cout<<s.substr(2,10); //结果为:3456789
第8题
解析:
答案√,以前我遇到过一道题“完美立方”,其中就会出现进度丢失的问题
cout<<pow(6,3)<<endl; //216
cout<<pow(3,3)<<endl; //27
cout<<pow(4,3)<<endl; //64
cout<<pow(5,3)<<endl; //125
cout<<pow(3,3)+pow(4,3)+pow(5,3)<<endl; //216
cout<<(pow(6,3)==pow(3,3)+pow(4,3)+pow(5,3)); //0
第9题
解析:
答案×,可以从1枚举到10,但是不能从1.0001... 枚举到 10.000..,会造成枚举范围模糊
第10题
解析:
答案√,
#include <bits/stdc++.h>
using namespace std;
double f(){return 1;
}
int main(){cout<<f()/2;//0.5 证明f()返回浮点型
}
三、编程题
第1题 [GESP202506 三级] 奇偶校验
题目描述
数据在传输过程中可能出错,因此接收方收到数据后通常会校验传输的数据是否正确,奇偶校验是经典的校验方式之一。
给定 n 个非负整数 c1,c2,…,cn 代表所传输的数据,它们的校验码取决于这些整数在二进制下 1 的数量之和的奇偶性。如果这些整数在二进制下共有奇数个 1,那么校验码为 1;否则校验码为 0。你能求出这些整数的校验码吗?
输入格式
第一行,一个正整数 n,表示所传输的数据量。
第二行,n 个非负整数 c1,c2,…,cn,表示所传输的数据。
输出格式
输出一行,两个整数,以一个空格分隔:
第一个整数表示 c1,c2,…,cn 在二进制下 1 的总数量;
第二个整数表示校验码(0 或 1)。
输入输出样例
输入 #1
4
71 69 83 80
输出 #1
13 1
输入 #2
6
1 2 4 8 16 32
输出 #2
6 0
说明/提示
对于所有测试点,保证 1≤n≤100,0≤ci≤255。
答案
#include <bits/stdc++.h>
using namespace std;
//函数实现“二进制下1的数量”
int tenTotwo(int x){int sum_1=0;//1的数量 //转换二进制 while(x){if(x%2==1){sum_1++;//+1}x/=2;}return sum_1;//返回1的数量
}
int main(){//1)确定数量量nint n;cin>>n;//2)填充n个数据int ans=0; for(int i=1;i<=n;i++){int temp;cin>>temp;//3)函数计算当前1数量ans+=tenTotwo(temp); } //4)输出1的数量,数量是否为奇数cout<<ans<<" "<<(ans%2==1);
}
第2题 [GESP202506 三级] 分糖果
题目描述
有 n 位小朋友排成一队等待老师分糖果。第 i 位小朋友想要至少 ai 颗糖果,并且分给他的糖果数量必须比分给前一位小朋友的糖果数量更多,不然他就会不开心。
老师想知道至少需要准备多少颗糖果才能让所有小朋友都开心。你能帮帮老师吗?
输入格式
第一行,一个正整数 n,表示小朋友的人数。
第二行,n 个正整数 a1,a2,…,an,依次表示每位小朋友至少需要的糖果数量。
输出格式
输出一行,一个整数,表示最少需要准备的糖果数量。
输入输出样例
输入 #1
4
1 4 3 3
输出 #1
16
输入 #2
15
314 15926 53589793 238462643 383279502 8 8 4 1 9 7 1 6 9 3
输出 #2
4508143253
说明/提示
对于所有测试点,保证 1≤n≤1000,1≤ai≤。
答案
#include <bits/stdc++.h>
using namespace std;
int main(){//1)确定小朋友数量nint n;cin>>n;//2)填充每个小朋友需求long long after_max=0,ans=0;for(int i=1;i<=n;i++){long long temp;cin>>temp;//3)计算真正的需求if(temp<after_max) temp=after_max+1;after_max=temp;//更新最大值 //4)累加“真需求”ans+=temp;}//5)输出结果cout<<ans;
}