2024年6月GESPC++三级真题解析(含视频)
视频讲解:GESP2024年6月三级C++真题讲解
一、单选题
第1题
解析:
答案C,
认证语言有C/C++、Python、Scratch
第2题
解析:
答案B,判断闰年口诀“ 4闰 100不闰 400再闰 ”
第3题
解析:
答案C,32个字节,表达2的32次方,但是最高位表示符号位,需32-1
第4题
解析:
答案C,
i++保证下一位 8进制数存储
decimal%8取出 当前余数
decimal/=8 更新 “被除数”
第5题
解析:
答案C,
101(2)=5(10)
0.11(2)=0.75(10)
第6题
解析:
答案B,
i循环为:0,1,2,3,4
i为1时,j循环1次;i为2时,j循环2次,每次循环 sum+1
总共循环10次,即sum=10
第7题
解析:
答案C,
12(10)=1100(2)
右移两位,变 11(2),即十进制的3
第8题
解析:
答案C,就是在做a、b交换
a=a^b; 记录差异
b=a^b; 根据差异 获取原来的a
a=a^b; 根据差异 获取原来的b
第9题
解析:
答案C,长度为4,但是官方答案给了C
题目想表达应该是占有内存,因为字符串尾部有‘\0’终止符,所有占用内存为5
第10题
解析:
答案B,有人比max大,max才把它抢过来
第11题
解析:
答案A,
count++ 表示数量+1
=i 表获取当前的数
第12题
解析:
答案C,
0的ascii是:48
6的ascii是:48+6
2的ascii是:48+2
9的ascii是:48+9
结果为:48*4 + 6+2+9=209
第13题
解析:
答案B,
+= 才能进行累加
arr[i] > 135 ? 1 : 0 表示:满足>135 返回1,否则返回0
第14题
解析:
答案D,输出字符串要用 双引号
第15题
解析:
答案A,
模拟第一次
字符:g e s p . c f
下标:0 1 2 3 4 5 6
found=4
token= str.subsrt(0,4) 也就是起点为0,4个字符 ,即“gesp”
result+=token; result+=" "; 即“gesp ”尾部加个空格
要想获取后半部分,起点下标是5
只有A选项符合
二、判断题
第1题
解析:
答案√,与语言无关,等级即对应能力
第2题
解析:
答案√,
-6原码:1000 0000,0000 0110
-6反码:1111 1111,1111 1001
-6补码:1111 1111,1111 1010
十六进制:F F F A
第3题
解析:
答案√,补码就是为了解决减法问题
第4题
解析:
答案×,字符‘0’ 是有ASCII值48的,‘\0’一无所有
第5题
解析:
答案×,数组就是连续存放的,链表才不是
第6题
解析:
答案×,不能直接对数组赋值
第7题
解析:
答案√,a为0至3时,最高位只能在2,a一旦超过3,最高位就超了,a|3就不可能==3了
第8题
解析:
答案×,
b=01100,0开头表示八进制,b对应二进制是000 0010 0100 0000
a&b结果为0
第9题
解析:
答案√,
i循环为1,2,3,4,5
(i+1)%3的结果分别为:2,0,1,2,0
而题目中的89781, 1%3的结果为1,最后一个不可能为1
第10题
解析:
答案√,
//枚举所有4位数
for(int i=1000;i<=9999;i++){//获取左右两边a=i/100;b=i%100;//判断是否符合if( (a+b)*(a+b)==i ){cout<<i;}
}
三、编程题
第1题 [GESP202406 三级] 移位
题目描述
小杨学习了加密技术移位,所有大写字母都向后按照⼀个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如,当偏移量是 3 的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
注:当偏移量是 26 的倍数时,每个大写字母经过偏移后会恰好回到原来的位置,即大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 经过偏移后会保持不变。
输入格式
第一行包含一个正整数 n。
输出格式
输出在偏移量为 n 的情况下,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 移位替换后的结果。
输入输出样例
输入 #1
3
输出 #1
DEFGHIJKLMNOPQRSTUVWXYZABC
说明/提示
【样例解释】
当偏移量是 3 的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
【数据范围】
对于全部数据,保证有 1≤n≤100。
答案
#include <bits/stdc++.h>
using namespace std;
int main() {//1)确定偏移量nint n;cin>>n;//2)循环"A"至"Z"for(int i=0;i<=25;i++){//3)计算出”实际偏移量“int true_num='A'+i -'A' +n;//4)输出加密后(’A‘+实际偏移量%26)cout<<char('A'+true_num%26);}}
第2题 [GESP202406 三级] 寻找倍数
题目描述
小杨有一个包含 n 个正整数的序列 A=[a1,a2,…,an],他想知道是否存在 i(1≤i≤n) 使得 ai 是序列 A 中所有数的倍数。
输入格式
第一行包含一个正整数 t,代表测试用例组数。
接下来是 t 组测试用例。对于每组测试用例,一共两行。
其中,第一行包含一个正整数 n;第二行包含 n 个正整数,代表序列 A。
输出格式
对于每组测试用例,如果存在 i(1≤i≤n) ,满足对于所有 k(1≤k≤n) ai 是 ak 的倍数,输出 Yes
,否则输出 No
。
输入输出样例
输入 #1
2
3
1 2 4
5
1 2 3 4 5
输出 #1
Yes
No
说明/提示
【样例解释】
对于第⼀组数据,对于 a3=4,满足 a3 是 a1 和 a2 的倍数。
【数据范围】
对于全部数据,保证有 1≤t≤10,1≤n≤,1≤ai≤
。
答案
#include <bits/stdc++.h>
using namespace std;
int main() {//1)确定序列数量tint t;cin>>t;//2)填充每个序列for(int i=1;i<=t;i++){//2.1)确定序列的长度int n;cin>>n;//2.2)填充当前序列的每个元素int arr[100010]={};int maxx=INT_MIN;for(int j=1;j<=n;j++){cin>>arr[j];//3)填充的同时找最大值if(maxx<arr[j]) maxx=arr[j];}//4)验证该该最大值是否所有元素的倍数//4.1)假设符合bool flag=true;//4.2)验证是否符合 for(int j=1;j<=n;j++){if(maxx%arr[j]!=0){flag=false;break;}}//5)根据flag判断if(flag) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}