视频讲解:GESP2024年12月二级C++真题讲解
一、单选题
第1题
解析:
答案C,计算机常识尽量和计算机相关
第2题
解析:
答案A,
- b: byte(字节)
- kb: kilobyte(千字节)
- mb: megabyte(兆字节)
- gb: gigabyte(吉字节)
第3题
解析:
答案D,
3+3%3*2-1
=3+0*2-1
=3-1
=2
第4题
解析:
答案B,i循环0至9
第5题
解析:
答案D,tnt没有初始值,最终值不确定
第6题
解析:
答案B,i循环到2时,i%2为false,退出循环
第7题
解析:
答案C,for循环,i为0 1 2 3 4 5 6 7 8 9 ,其中0 3 6 9进行%3时为false,所以只执行了4次“0#”,最后i为10才跳出循环,所以输出“1#”,最终输出”0#“四次,“1#”一次
第8题
解析:
答案C,i%7判断的是”不能被7整除“,i%3判断的是”不能被3整除“,不符合题意
第9题
解析:
答案D,取出的个位需累加,tnt=N%10不符合题意
第10题
解析:
答案A,
i为0时,j循环不输出
i为1时,j循环输出0
i为2时,j循环输出0 1
i为3时,j循环输出0 1 2
i为4时,j循环输出0 1 2 3
i为5时,j循环输出0 1 2 3 4
第11题
解析:
答案A,输出完所有列,才可输出换行
第12题
解析:
答案D,nowNum=nowNum+i计算的是当前累加和(1+2+3),而不是当前阶乘(1*2*3)
第13题
解析:
答案B,假设n=2,m=10,只需循环枚举2至8,也就是for(int i=n;i<m-1;i++)
第14题
解析:
答案D,但height=5时
第1行输出4个空格,1个星号
第2行输出3个空格,3个星号
第3行输出2个空格,7个星号
即第i行输出height-i个空格,i*2+1个星号
因为循环从0开始,所以height-i-1
第15题
解析:
答案C,sqrt(10+20+30)结果不为30
二、判断题
第1题
解析:
答案√,Ctrl+C 与Ctrl+V可实现文件复制
第2题
解析:
答案√,N(本身)-N/10*10(去除个位)=个位
第3题
解析:
答案√,
10<=n<=12
10<=12<=12
1<=12
1
第4题
解析:
答案√,带入n=4,int(sqrt(4))*int(sqrt(4))==4,条件成立
第5题
解析:
答案×,%%表示输出%,所以”%%a“的输出结果为“%a”
第6题
解析:
答案×,变量只能由数字、字母、下划线组合
第7题
解析:
答案×,continue导致后面的break始终没有执行
第8题
解析:
答案√,i循环为8 6 4,i为8时,j循环8次,即总共循环8+6+4=18次
第9题
解析:
答案√,i为0时,i%2结果为false,不影响cnt
第10题
解析:
答案√,while只是将for(int i=0;i<10+1;i++)拆分开了,效果一样的
三、编程题
第1题 [GESP202412 二级] 寻找数字
题目描述
小杨有一个正整数 a,小杨想知道是否存在一个正整数 b 满足 a=b4。
输入格式
第一行包含一个正整数 t,代表测试数据组数。
对于每组测试数据,第一行包含一个正整数代表 a。
输出格式
对于每组测试数据,如果存在满足条件的正整数 b,则输出 b,否则输出 −1。
输入输出样例
输入 #1
3
16
81
10
输出 #1
2
3
-1
说明/提示
对于全部数据,保证有 1≤t≤10^5,1≤ai≤10^8。
答案
#include<iostream>
using namespace std;
int main(){
//1.确定数字的数量
int n;
cin>>n;
//2.输入每个数
for(int i=1;i<=n;i++){
int temp;
cin>>temp;
//3.判断当前数是否存在a=b*b*b*b
int b;
bool flag=false;//假设不成立
//验证是否成立
for(b=1;b*b*b*b<=temp;b++){
if(temp==b*b*b*b){
flag=true;
break;
}
}
//4.能:输出b,否:输出-1
if(flag) cout<<b<<endl;
else cout<<-1<<endl;
}
}
第2题 [GESP202403 四级] 做题
题目描述
小杨有 n 个正整数,小杨想知道这些正整数的数位和中最大值是多少。“数位和”指的是一个数字中所有数位的和。例如:对于数字 12345,它的各个数位分别是 1,2,3,4,5。将这些数位相加,得到
1+2+3+4+5=15
因此,12345 的数位和是 15。
输入格式
第一行包含一个正整数 n,代表正整数个数。
之后 n 行,每行包含一个正整数。
输出格式
输出这些正整数的数位和的最值。
输入输出样例
输入 #1
3
16
81
10
输出 #1
9
说明/提示
对于全部数据,保证有 1≤n≤10^5,每个正整数不超过 10^12。
答案
#include<iostream>
using namespace std;
int main(){
//1.确定有几个数
int n;
cin>>n;
//2.输入每个数
int maxx=0;
for(int i=1;i<=n;i++){
long long temp;
cin>>temp;
//3.计算出各个位数之和
int sum=0;
while(temp){
sum+=temp%10;
temp/=10;
}
//4.比较找出最大值
if(sum>maxx) maxx=sum;
}
//5.输出结果
cout<<maxx;
}