视频讲解:GESP2023年12月三级C++真题讲解

一、单选题

第1题

解析:

答案C,char数组是保存单个字符

第2题

解析:

答案D,统一转二进制

A选项:221(十进制)= 1101 1101(二进制)

B选项:335(八进制)= 1101 1101(二进制)

C选项:dd(十六进制)= 1101 1101(二进制)

D选项:5d(十六进制)= 0101 1101(二进制)

第3题

解析:

答案C,起点下标是0

第4题

解析:

答案C,罗列所有可能

i循环为:1,2,3,4,5,6

j循环为:每次循环为1,2,3,4

(i=2,j=1)(i=4,j=2)(i=6,j=3)(i=5,j=2)是2倍关系

第5题

解析:

答案C,str.length()是str字符串的长度,即为4

i循环0 , 1 ,2,3,4;循环5次,即temp=5

第6题

解析:

答案A,x为str字符串的长度

第7题

解析:

答案A

字符:c h e n '\0'
下标:0 1 2 3  4
下标5越界了,c/c++没有处理这种异常,输出的内容是未知的

第8题

解析:

答案C,字符数组使用{}初始化,初始化的值是0,即字符 '\0' , 什么也不输出

第9题

解析:

答案C,统一转为ASCII值

A选项:'o' = 111

B选项:'a' + 14 = 111

C选项:115

D选项:111

第10题

解析:

答案C,32为二进制,除了最高位的符号位,不能和表达真值,所以为-(2^31-1) 至 2^31-1,

但是补码形式,可表达-2^31

所以 -2^31 至 2^31-1

第11题

解析:

答案A,0 和 15都满足条件

第12题

解析:

答案B

a/b*1.0

=3/2*1.0

=1*1.0

=1

第13题

解析:

答案A,代码加注释即可

for(int i=0;i<=strSrc.length();i++)
{
    //数字字符进行拼接
	if(strSrc[i]>='0'&&strSrc[i]<='9')
	{
		tel=tel+strSrc[i];
	}
	else if(tel!="")//不是数字字符,且tel有内容
	{
		cout<<tel<<endl;//输出拼接好的号码
		tel="";//清空当前号码,为下一次拼接做准备
	}
}

第14题

解析:

答案C,只要有油,油量表有没有都无所谓

第15题

解析:

答案B,现代计算机就是基于 “冯诺依曼” 结构

二、判断题

第1题

解析:

答案√,int中的数字进行布尔运算,除了0是false,其他都是true,也就是1

5&&2

=1&&1

=1

第2题

解析:

答案√,cin字符串时,空格会被视为结束,所以空格后面的内容都不接收

第3题

解析:

答案√,int中的数字进行布尔运算,除了0是false,其他都是true,也就是1

5||2

=1||1

=1

第4题

解析:

答案√,replact(起点,数量,替换字符串)

replace(0,1,"C")意思就是从下标0开始,替换1个字符,用 "C" 替换

第5题

解析:

答案×,只有0、5下标满足条件,但是list[0]=1,list[5]=6

第6题

解析:

答案×,输出数组名,会输出数组的地址

第7题

解析:

答案√,0下标存储的就是1

第8题

解析:

答案√

数组值:1 2 3 4 5 6 7 8 9 10
下  标:0 1 2 3 4 5 6 7 8 9 
i循环为0 2 4 6 8,对应的数组值是1 3 5 7 9

第9题

解析:

答案×,Devc++是软件,Windows、MacOS、Linux、鸿蒙等才是操作系统

第10题

解析:

答案√

for(int i=1;i<=5;i++){
        		
}
 
int i=1;
while(i<=5){
	i++;
}

三、编程题

第1题 [GESP202312 三级] 小猫分鱼

题目描述

海滩上有一堆鱼,N 只小猫来分。第一只小猫把这堆鱼平均分为 N 份,多了 i<N 个,这只小猫把多的 i 个扔入海中,拿走了一份。第二只小猫接着把剩下的鱼平均分成 N 份,又多了 i 个,小猫同样把多的 i 个扔入海中,拿走了一份。第三、第四、……,第 N 只小猫仍是最终剩下的鱼分成 N 份,扔掉多了的 i 个,并拿走一份。

编写程序,输入小猫的数量 N 以及每次扔到海里的鱼的数量 i,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。

例如:两只小猫来分鱼 N=2,每次扔掉鱼的数量为 i=1,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走 1 条鱼,则此时待分配的有 3 条鱼。第一只小猫待分配的鱼有 3×2+1=7 条。

输入格式

总共 2 行。第一行一个整数 N,第二行一个整数 i。

保证 0<N<10;i<N 。

输出格式

一行一个整数,表示满足要求的海滩上最少的鱼数。

输入输出样例

输入 #1

2
1

输出 #1

7

输入 #2

3
1

输出 #2

25

说明/提示

样例解释 2

三只小猫来分鱼 N=3,每次扔掉鱼的数量为 i=1,为了每只小猫都可吃到鱼,可令第三只小猫需要拿走 3 条鱼(拿走 1 条和 2 条不满足要求),则此时待分配的有 10 条鱼。第二只小猫待分配的鱼有 10×3/2+1=16 条。第一只小猫待分配的鱼有 16×3/2+1=25 条。

答案

#include<bits/stdc++.h>
using namespace std;
int main(){
	//1)确定猫数量n,丢鱼数量i
	int n,i;
	cin>>n>>i; 
	//2)枚举所有鱼的数量(从小到大)
	for(int first=n+i;;first+=n){
		//3)模拟拿鱼过程,判断是否符合
		//3.1)假设可以
		bool flag=true;
		//3.2)验证拿鱼是否成立 
		int cnt=first;//拷贝最初鱼的数量
		for(int j=n-1;j>=1;j--){
			if(cnt%(n-1)!=0){
				flag=false;
				break; 
			}
			//还原出下一只猫沙滩的状态 
			cnt=cnt/(n-1)*n+i;
		} 
		//4)根据flag输出
		if(flag){
			cout<<cnt;
			return 0;
		} 
	}
}

第2题 [GESP202312 三级] 单位转换

题目描述

小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。

小杨只学了长度单位和重量单位,具体来说:

  • 长度单位包括千米(km)、米(m)、毫米(mm),它们之间的关系是:1km=1000m=1000000mm。

  • 重量单位包括千克(kg)、克(g)、毫克(mg),它们之间的关系是:1kg=1000g=1000000mg。

小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为克。

现在,请你帮忙完成单位转换的程序。

输入格式

输入的第一行为一个整数,表示题目数量。

接下来 N 行,每行一个字符串,表示转换单位的题目,格式为 x 单位 1=? 单位 2。其中,x 为一个不超过 1000 的非负整数, 单位 1 和 单位 2 分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单位 1 比 单位 2 更大。

例如,如果题目需要你将 1km 转换为 mm,则输入为 1 km = ? mm

保证 1≤N≤1000。

输出格式

输出 N 行,依次输出所有题目的答案,输出时,只需要将输入中的 ? 代入答案,其余部分一字不差地输出即可。由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的 x 是整数,因此答案一定也是整数。

例如,如果题目需要你将 1km 转换为 mm,则输入为 1 km = ? mm。则你需要输出 1 km = 1000000 mm

输入输出样例

输入 #1

2
1 km = ? mm
1 m = ? mm

输出 #1

1 km = 1000000 mm
1 m = 1000 mm

输入 #2

5
100 m = ? mm
1000 km = ? m
20 kg = ? g
200 g = ? mg
0 kg = ? mg

输出 #2

100 m = 100000 mm
1000 km = 1000000 m
20 kg = 20000 g
200 g = 200000 mg
0 kg = 0 mg

答案

#include<bits/stdc++.h>
using namespace std;
//统一换算成 mm/mg 
int f(string s){
	if(s=="km"||s=="kg") return 1000000;
	else if(s=="m"||s=="g") return 1000;
	else return 1;
}
int main(){
	//1)确定数据数量n
	int n;cin>>n;
	//2)填充每个数据
	while(n--){
		//2.1)确定旧值,旧单位
		int old_val;
		string old_unit;
		cin>>old_val>>old_unit;
		//2.2)确定新单位
		char temp;
		string new_unit;
		cin>>temp>>temp>>new_unit;
		//3)计算换算结果 
		int ans=old_val*f(old_unit) / f(new_unit);
		//4)输出 
		printf("%d %s = %d %s\n",old_val,old_unit.c_str(),ans,new_unit.c_str());
	}
	
}

Logo

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

更多推荐