视频讲解: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、kint n,k;cin>>n>>k;//2)循环1-nint 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;
}