视频讲解: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);
	} 
} 

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐