2024年9月GESPC++三级真题解析(含视频)

发布于:2025-09-07 ⋅ 阅读:(28) ⋅ 点赞:(0)

  视频讲解:GESP2024年9月三级C++真题讲解

一、单选题

第1题

解析:

答案B,会有精度缺失

double a=0.9;
double b=1.0;
//输出为0.09999999999999997780
cout<<fixed<<setprecision(20)<<b-a<<endl;

第2题

解析:

答案C

A选项:负数的原码、反码、补码形式就不一样
B选项:符号位+  绝对值(真值)才对
D选项:-1的反码 应该是 [1111 1110]

第3题

解析:

答案A

第1步:
3703(8进制) 转2进制:
3   7   0   3
011 111 000 011
即二进制为:011111000011
第2步:
转16进制
0111 1100 0011
7    C    3

第4题

解析:

答案D

0.8125*2=1.625  取整数1
0.625*2=1.250  取整数1
0.250*2=0.5  取整数0
0.5*2=1.0 取整数1
二进制位0.1101

第5题

解析:

答案C

C选项:
23(十进制)=10111(二进制)
10(十进制)=1010(二进制)
进行 | 运算
 10111
| 1010
-------
 11111
即31(十进制)

第6题

解析:

答案B

2>>2为:10(二进制)右1位,结果为0

1>>1为:1(二进制)右1位,结果为0

所以 (2>>2)==(1>>1)

第7题

解析:

答案C

a^=b; 找出二进制差异

b^=a;根据差异计算出原a的值

a^=b; 根据差异计算出原b的值

第8题

解析:

答案C

~1 对应二进制  1111 1110

最低位做“&”运算 必为0

第9题

解析:

答案A

第10题

解析:

答案D

1)计算result
1.1)a、b转为二进制
a的123,转二进制为:0111 1011
b的1,转二进制为:0000 0001
1.2)a&b运算
  0111 1011
& 0000 0001
---------------
  0000 0001
所以result输出为1
2)计算result2
2.1)a2、b2转为二进制
a2的-123,转二进制为:0111 1011
b2的1,转二进制为:1111 1111,1111 1111,11111 1111,1111 1111   因为unsigned,以补码形式存储
2.2)a2&b2运算(只算前8位,后面都为0不用管)
  0111 1011
& 1111 1111
---------------
  0111 1011
所以result2输出为-123

第11题

解析:

答案D

1)计算什么时候到达100,发现累加到13,为91,还需+9才能到100

1+2+3+4+5+6+7+8+9+10+11+12+13+9=100

2)计算总浇水次数

1*1+2*2+3*3+4*4+5*5+6*6+7*7+8*8+9*9*+11*11+12*12+13*13+9*14

=1+4+9+16+25+36+49+64+81+121+144+169+126

=945

第12题

解析:

答案C

A选项:a数组内没存放数据,且i为10时,a[10]越界

B选项:i为10时,a[10]越界

D选项:i为10时,a[10]越界

第13题

解析:

答案D,a[10]没有存放数据,数据是随机的

第14题

解析:

答案C

枚举解决

假设A是小偷,和B说C是小偷冲突

假设B是小偷,和C说D是小偷冲突

假设C是小偷,没有冲突

假设D是小偷,因D小偷,所以是D说假话,即D说C是小偷,有冲突

第15题

解析:

答案B

字符:H e l l o , C H A D
下标:0 1 2 3 4 5 6 7 8 9

字符‘A’下标为8

二、判断题

第1题

解析:

答案√

  0000 0001
+ 1000 0001
----------------
  1000 0010
对应十进制就是-2

第2题

解析:

答案√

1的补码:0000 0001
~1的结果:1111 1110
补码:1111 1110  进行-1,转换反码
反码:1111 1101 进行取反,转换原码
原码:1000 0010  就是-2

第3题

解析:

答案√

1的补码:0000 0001
~1的结果:1111 1110

第4题

解析:

答案√

Y的低4位都为1,与X进行&运算,只要X低4为有1,就会被获取到

第5题

解析:

答案×

char x=65;  //x为字符 ‘A’
x++;//x为字符 ‘B’
cout<<x++<<endl; //先输出字符‘B’,x再进行++

第6题

解析:

答案√

字符:C H A D a i
下标:0 1 2 3 4 5 
‘D’的下标为4
size_t的意思只能保存0或正整数,即长度

第7题

解析:

答案×

a[10]={1} 是给a[0]赋值为1

a[1]里面没有赋值

第8题

解析:

答案√

ASCII 65对应的 就是 字符‘A’

第9题

解析:

答案√

A(16)=1010(2)

B(16)=1011(2)

第10题

解析:

答案×

def 转十进制
=d*16^2 + e*16^1 + f*16^0
=13*16*16 + 14*16 + 15*1
=3328 + 224 + 15
=3567

103231 转五进制
=1*5^5 + 0*5^4 + 3*5^3 + 2*5^2 + 3*5^1 + 1*5^0
=5*5*5*5*5 + 0 + 3*5*5*5 + 2*5*5 + 3*5 + 1
=3125 + 375 + 50 + 15 +1
=3566

三、编程题

第1题 [GESP202409 三级] 平衡序列

题目描述

小杨有一个包含 n 个正整数的序列 a。他认为一个序列是平衡的当且仅当存在一个正整数 i(1≤i<n)使得序列第 1 到第 i 个数字的总和等于第 i+1 到第 n 个数字的总和。

小杨想请你判断序列 a 是否是平衡的。

输入格式

本题单个测试点内包含多组测试数据。第一行是一个正整数 t,表示测试用例组数。

接下来是 t 组测试用例。对每组测试用例,一共两行。

第一行包含一个正整数 n,表示序列长度。
第二行包含 n 个正整数,代表序列 a。

输出格式

对每组测试用例输出一行一个字符串。如果 a 是平衡的,输出 Yes,否则输出 No。

输入输出样例

输入 #1

3
3
1 2 3
4
2 3 1 4
5
1 2 3 4 5

输出 #1

Yes
Yes
No

说明/提示

样例 1 解释

  • 对第一组测试用例,令 i=2,有 1+2=3,因此序列是平衡的。
  • 对第二组测试用例,令 i=2,有 2+3=1+4,因此序列是平衡的。
  • 对第三组测试用例,不存在满足要求的 i。

数据规模与约定

对全部的测试数据,保证 1≤t≤100,1≤n,ai​≤10000。

答案

#include<bits/stdc++.h>
using namespace std;
int main(){
	//1)确定多少组数据t
	int t;
	cin>>t; 
	//2)填充t组数据
	for(int i=1;i<=t;i++){
		//2.1)确定长度n
		int n;
		cin>>n;
		//2.2)填充每个a
		int prefix_sum[10010]={};
		map<int,bool> flag; 
		for(int j=1;j<=n;j++){
			int a;
			cin>>a;
			//3)填充同时,计算前缀和
			prefix_sum[j]=prefix_sum[j-1]+a;
			//4.1)标记当前 “ 前缀和”出现
			flag[  prefix_sum[j] ] =true;
		}
		//4)根据“前缀和”判断(众多“前缀和”中,有没有一半)
		if(   prefix_sum[n]%2==0 &&  flag[ prefix_sum[n]/2 ]  ){
			cout<<"Yes"<<endl;
		}else{
			cout<<"No"<<endl;
		}
	}	
}

第2题 [GESP202409 三级] 回文拼接

题目描述

一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,aabaa 和 ccddcc都是回文串,但 abcd 不是。

小杨有 n 个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为 2 的回文串前后拼接而成。

输入格式

第一行包含一个正整数 n,代表字符串数量。
接下来 n 行,每行一个仅包含小写字母的字符串。

输出格式

对于每个字符串输出一行,如果该字符串由两个长度至少为 2 的回文串前后拼接而成则输出 Yes,否则输出 No。

输入输出样例

输入 #1

4
abcd
aabbb
aaac
abcdd

输出 #1

No
Yes
No
No

说明/提示

样例 1 解释

对于第 1,3,4 个字符串,都不是由两个长度至少为 2 的回文串前后拼接而成。 第 2 个字符串由回文串 aa 和 bbb 前后拼接而成,并且两个回文串长度都至少为 2。

数据规模与约定

对全部的测试数据,保证 1≤n≤10,且每个字符串的长度均不超过 100。

答案

#include<bits/stdc++.h>
using namespace std;
bool isHui(string s){
	string r_s="";
	int len=s.size();
	for(int i=len-1;i>=0;i--){
		r_s+=s[i];
	}
	return r_s==s;
}
int main(){
	//1)确定字符串数量n
	int n;
	cin>>n;
	//2)填充每个字符串
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		//3)划分所有情况
		bool flag=false;//假设不行 
		int len= s.size();
		for(int j=2;j<=len-2;j++){
			string left=s.substr(0,j);
			string right=s.substr(j);
			//4)判断 左右两边是否为 “回文”
			if( isHui(left) && isHui(right) ){
				flag=true;
				break; 
			}
		}
		//5)根据flag判断
		if(flag) cout<<"Yes"<<endl;
		else  cout<<"No"<<endl;
	}
}


网站公告

今日签到

点亮在社区的每一天
去签到