视频讲解:GESP2024年6月二级C++真题讲解

一、单选题

第1题

解析:

答案C,认证语言有scratch、python、c/c++,总共3种

第2题

解析:

答案B,4闰、100不闰,400再闰,即  (yr%4==0&&yr%100!=0)  ||   (yr%400==0)

第3题

解析:

答案A,变量名只能由数字、字母、下划线组合,A选项有减号

第4题

解析:

答案A,i+=1与i++执行效果一样

第5题

解析:

答案A

(5%2&&5%3)

=1&&2

=true&&true

=1

第6题

解析:

答案C,case表示的是该情况下,从这里执行,是执行的起点,若途中没遇到break,则会一直往下执行

第7题

解析:

答案D

A选项,(a&&b)表示a和b都得为true,所以A选项无误

B选项,(a||b)表示a或b得为true,所以B选项无误

C选项,!(a||b)表示a和b得为false,所以C选项无误

D选项,输入0和0将满足!(a||b),输出2,所以D错误

第8题

解析:

答案B

目标:最少数量,所以策略为“尽可能用面额大的货币”

N/5,表示最多使用多少个5元

(N-M5*5)/2,表示用完5元之后,最多使用多少个2元

N-M5*5-M2*2,表示用完5、2元之后,最多使用多少个1元

第9题

解析:

答案C

i循环:0,1,2,3,4,5,6,7,8,9

i为0、1时,j不循环

i为2、3、4、5、6、7、8、9时,j分别循环1、2、3、4、5、6、7、8次,总共循环36次

第10题

解析:

答案C

i循环:0,1,2,3,4,5,6,7,8,9

内层循环j无法影响loopCount+=1语句,所以总共执行10次

第11题

解析:

答案D,while(N==0)无法实现预期效果,假如第一次输入20,最终结果直接输出0

第12题

解析:

答案D,质数定义:大于1的自然数,且只能被1和它本身整除

A选项,无法正确判断1

B选项,无法解决小于2的数

C选项,无法正确判断0、1

第13题

解析:

答案A,BCD选项都在围绕“换行”进行修改,但endl已正确,不需要调整

第14题

解析:

答案B

i循环为:0,1,2,3,4,5,6,7,8,9

i为偶数时,被continue,所以实际i循环为:1,3,5,7,9

i为奇数cnt1+=1,所以cnt2始终不累加

即执行完后,cnt1=5,cnt2=0

第15题

解析:

答案D

A:M(36)中3能被N整除,但是M走到3时,无法正确输出M的初始值,所以A选项错误

B:M为0时,才可能输出是否为幸运数,而M为0,无法正确输出M的初始值,所以B选项错

C:无“非超级幸运数”的情况,所以C选项错

二、判断题

第1题

解析:

答案×,字符相加,会使用字符的ASCII值进行相加,即'9'(57)+'1'(49)=106

第2题

解析:

答案×,和数学中的负数运算一样,即

(-1)*(-1)=1

(1)*(-1)=-1

(-1)*(1)=-1

(1)*(1)=1

第3题

解析:

答案×,强制转化为int类型,只会舍去小数部分,不会四舍五入

第4题

解析:

答案√,10/3=3,10%3=1

第5题

解析:

答案×,scanf是函数,不是关键字,不能作为变量命

第6题

解析:

答案×,continue跳过本次循环,不会影响i++

第7题

解析:

答案×

i循环为:0,1,2,3,4,5,6,7,8,9

i为0、1时,j不循环

即i为2,3,4,5,6,7,8,9时,j才循环

但是break,每次cnt+=1只执行一次

所以总共执行7次,结果为7

第8题

解析:

答案√

i循环为1、2、3、4

i为1时,j循环1、2、3、4

i为2时,j循环2、4

i为3时,j循环3

i为4时,j循环4

只有i*j为偶数时,cnt+=1才执行,即1*2、1*4、2*2、2*4、4*4可以,总共5次

第9题

解析:

答案√,while循环,实现“累加当前个位,去除当前个位”

第10题

解析:

答案√,等级对应难度、能力,与编程语言无关,编程语言只是一个载体

三、编程题

第1题 [GESP202406 二级] 平方之和

题目描述

小杨有 n 个正整数 a1​,a2​,…,an​,他想知道对于所有的 i(1≤i≤n),是否存在两个正整数 x 和 y满足 x×x+y×y=ai​。

输入格式

第一行包含一个正整数 n,代表正整数数量。 之后 n 行,每行包含一个正整数,代表 ai​。

输出格式

对于每个正整数 ai​,如果存在两个正整数 x 和 y 满足 x×x+y×y=ai​,输出 Yes,否则输出 No

输入输出样例

输入 #1

2
5
4

输出 #1

Yes
No

说明/提示

对于第一个正整数,存在 1×1+2×2=5,因此答案为 Yes

对于全部数据,保证有 1≤n≤10,1≤ai​≤10^6。

答案

#include<iostream>
#include<math.h>
using namespace std;
int main(){
	//1)确定有数量
	int n;
	cin>>n;
	//2)输入每一个数
	for(int i=1;i<=n;i++){
		int temp;
		cin>>temp;
		//3)验证是否为“平方之和”
		bool flag=false;//假设不符合 
		//3.1)枚举x的所有情况
		for(int x=1;x*x<=temp;x++){
			//3.2)验证y是否符合 
			int y=sqrt(temp-x*x);
			if(y*y+x*x==temp&&y>=1){
				flag=true;
				break;
			} 
		}
		//3.2)根据flag输出
		if(flag) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	} 
}

第2题 [GESP202406 二级] 计数

题目描述

小杨认为自己的幸运数是正整数 k(注:保证 1≤k≤9)。小杨想知道,对于从 1 到 n 的所有正整数中, k 出现了多少次。

输入格式

第一行包含一个正整数 n。

第二行包含一个正整数 k。

输出格式

输出从 1 到 n 的所有正整数中, k 出现的次数。

输入输出样例

输入 #1

25
2

输出 #1

9

说明/提示

从 1 到 25 中,2 出现的正整数有 2,12,20,21,22,23,24,25 ,一共出现了 9 次。

对于全部数据,保证有 1≤n≤1000,1≤k≤9。

答案

#include<iostream>
#include<math.h>
using namespace std;
int main(){
	//1)输入n、k
	int n,k;
	cin>>n>>k;
	//2)循环1-n
	int ans=0;
	for(int i=1;i<=n;i++){
		//3)计数当前出现了几个k 
		int temp=i;
		while(temp){
			if(temp%10==k) ans++;
			temp/=10;
		}
	} 
	//4)输出k出现次数
	cout<<ans; 
}

Logo

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

更多推荐