2023年9月GESPC++三级真题解析(含视频)
小杨在第 1 天、第 2 天、第 3 天分别向 0 号、 1 号、 0 号存钱罐存了 1 元钱、 2 元钱、 3 元钱,因此 0号存钱罐有 1+3=4 元钱,而 1 号存钱罐有 2 元钱。输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。,"~" 是位运算的取反,"<" 是比较运算符," << " 是位运算的左移。,左移后,会用
视频讲解:GESP2023年9月三级C++真题讲解
一、单选题
第1题

解析:
答案B,app就是应用软件,例如微信、抖音、百度地图等
第2题

解析:
答案B,a循环为5,4;s=1*5*4=20
第3题

解析:
答案C,26字母:ABCDE FGHIJ KLMN;A和L相差11,所以+11即可

第4题

解析:
答案B,"~" 是位运算的取反,"<" 是比较运算符," << " 是位运算的左移
第5题

解析:
答案A,long long占有8字节,4个元素*8=32
第6题

解析:
答案A,从0下标开始,所以最大下标是2
第7题

解析:
答案B,
A选项:要想省略数组大小,需初始化数据
C选项:数组大小必须是整数
D选项:应该以指针方式去写:double* d = new doouble[3];
第8题

解析:
答案C,
A选项:八进制和十六进制同样可以表达小数
B选项:时分秒就是二十四进制、六十进制
D选项:最大数字是7,超过8就进位了
第9题

解析:
答案C,创建C/C++时,没有对 ”数组越界“ 这个问题进行解决,不会提示错误
第10题

解析:
答案A,
B选项:a为INT_MAX时会溢出
C选项:a为0时,0&1=0
D选项:a为1时,1&1=1
第11题

解析:
答案B,
a为3时,二进制:11,>>1结果为1
b为2时,二进制:10,>>1结果为1
第12题

解析:
答案D,
A选项:字符 ‘0’ 就会表达错误
B选项:会先算 'A' <=a 的布尔值,再拿布尔值和<=‘Z’做比较
C选项:‘a’ 无法代表变量
第13题

解析:
答案B,
b=a>>8;获取a的原值10
a=a & 0xff;去除a<<8的部分,留下b的部分,即获取b的原值20
第14题

解析:
答案D,res初始值为0,无论是累加、累乘,都无法输出120
第15题

解析:
答案B,

二、判断题
第1题

解析:
答案×,
0.101(二进制)
=1*2^(-1) + 0*2^(-2) + 1*2^(-3)
=0.5 + 0 + 0.125
=0.625
第2题

解析:
答案√,位运算也存在优先级
第3题

解析:
答案×,字符'3' 对应的ASCII值是51
第4题

解析:
答案×,数组越界不会报错,会输出未知的数
第5题

解析:
答案√,左移后,会用0补位,补到最后全是0,所以值总会变为0
第6题

解析:
答案×,数组元素,在内存中位置是按顺序的
第7题

解析:
答案×,可以省略数组大小,例如 int arr[]={1,2,3,4,5};
第8题

解析:
答案×,枚举无法证明 “ 哥德巴赫猜想 ”
第9题

解析:
答案√,0xff代表8位二进制都标记为1,而第9为二进制代表256,所以前八位二进制总和为256-1=255
第10题

解析:
答案√,a只有第一位二进制为1,代表是奇数,若为0,则为偶数
所以a&1运算,只有a第一位为0时,(a&1)的值为0
三、编程题
第1题 [GESP202309 三级] 小杨的储蓄
题目描述
小杨共有 N 个储蓄罐,编号从 0 到 N−1。从第 1 天开始,小杨每天都会往存钱罐里存钱。具体来说,第 i 天他会挑选一个存钱罐 ai,并存入 i 元钱。过了 D 天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
输入格式
输入 2 行,第一行两个整数 N,D;第二行 D 个整数,其中第 i 个整数为 ai(保证 0≤ai≤N−1)。
每行的各个整数之间用单个空格分隔。
保证 1≤N≤1,000;1≤D≤1,000。
输出格式
输出 N 个用单个空格隔开的整数,其中第 i 个整数表示编号为 i−1 的存钱罐中有多少钱(i=1,⋯,N)。
输入输出样例
输入 #1
2 3
0 1 0
输出 #1
4 2
输入 #2
3 5
0 0 0 2 0
输出 #2
11 0 4
说明/提示
样例解释 1:
小杨在第 1 天、第 2 天、第 3 天分别向 0 号、 1 号、 0 号存钱罐存了 1 元钱、 2 元钱、 3 元钱,因此 0号存钱罐有 1+3=4 元钱,而 1 号存钱罐有 2 元钱。
答案
#include<iostream>
using namespace std;
int main(){
//1)确储蓄罐数量n,经过天数d
int n,d;
cin>>n>>d;
//2)填充每天的储蓄罐编号
int money[1010]={};
for(int i=1;i<=d;i++){
int id;
cin>>id;
//3)对当前储蓄罐 存钱(金额=天数)
money[id]+=i;
}
//4)输出每个储蓄罐的情况
for(int i=0;i<=n-1;i++){
cout<<money[i]<<" ";
}
}
第2题 [GESP202309 三级] 进制判断
题目描述
N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。
现在有 N 个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如,15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。
输入格式
输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,可能以 0 开头。保证不会出现空行。
保证 1≤N≤1000,保证所有字符串长度不超过 10。
输出格式
输出 N 行,每行 4 个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。
例如,对于只可能是十六进制数的 15A6F,就需要输出 0 0 0 1;而对于四者皆有可能的 1011,则需要输出 1 1 1 1。
输入输出样例
输入 #1
2
15A6F
1011
输出 #1
0 0 0 1
1 1 1 1
输入 #2
4
1234567
12345678
FF
GG
输出 #2
0 1 1 1
0 0 1 1
0 0 0 1
0 0 0 0
答案
#include<iostream>
using namespace std;
int main(){
//1)确定数据数量n
int n;
cin>>n;
//2)填充n组数据
while(n--){
string s;
cin>>s;
//3)判断各个进制存在的可能
bool bin=true,oct=true,dec=true,hex=true;
for(int i=0;i<s.size();i++){
if( !(s[i]>='0' && s[i]<='1') ) bin=false;
if( !(s[i]>='0' && s[i]<='7') ) oct=false;
if( !(s[i]>='0' && s[i]<='9') ) dec=false;
if( !(s[i]>='0' && s[i]<='9'||s[i]>='A' && s[i]<='F') ) hex=false;
if( !bin && !oct && !dec && !hex) break;
}
//4)输出结果
printf("%d %d %d %d\n",bin,oct,dec,hex);
}
}
更多推荐



所有评论(0)