视频讲解:GESP2025年3月二级C++真题讲解

一、单选题

第1题

解析:

答案D,DeepSeek(人工智能),哪吒2(电影),所以deepseek可以为哪吒生成剧情脚本

第2题

解析:

答案C,椭圆(开始/结束),平行四边形(输入/输出),菱形(判断)

第3题

解析:

答案A,==表示判断相等,不会改变a、b的值,所以a为3,b为4

第4题

解析:

答案A,

A:只有0至9的情况,1至8已被判断,剩下0和9,else即可实现

B:remainder <= 5会把0的情况也纳入进来

C:表示一个范围时,不可“6<=a<=8”,需联立两个条件“6<=a&&a<=8”

D:取个位需n%10

第5题

解析:

答案D,i的所有情况:0 1 2 3 4 5 6 7 8 9,0 3 6 9时+2,其余1 2 4 5 7 8时+1,所以总共+2*4+1*6=14 

第6题

解析:

答案A,break第一次循环就退出,i为初始值10

第7题

解析:

答案D

i的所有循环情况:0 1 2 3 4 5 6 7 8 9

只有0 3 6 9时,i%3的值为0

所以i为1 2 4 5 7 8才输出”0#“,总共输出6次

因为i为10的时候,才跳出循环,所以最后还会输出“1#”

最终输出“0#0#0#0#0#0#1#”

第8题

解析:

答案B

i为0时,j不循环

i为1时,j循环输出“1-”

i为2时,j循环输出“2-1-”

i为3时,j循环输出“3-2-1-”

i为4时,j循环输出“4-3-2-1-”

最终输出“1-2-1-3-2-1-4-3-2-1-”

第9题

解析:

答案C,!(i%7)是在判断i除以7是否有余数,不是判断除以7余数为2

第10题

解析:

答案B

找到3,数量+1,退出即可,所以为break

当前个位不为3,需/10,检查下一个位数,所以为j/=10

第11题

解析:

答案C,"实现1"只有一层循环,效率更高

第12题

解析:

答案D,要找的是4-1000所有偶数的质数之和,break放外面,只能找到4的质数之和了

第13题

解析:

答案B,"last+=1"与"last=last+1"效果相同

第14题

解析:

答案C,rand()%10可随机取出0-9,需+1,变成1-10

第15题

解析:

答案C,b-a的差可能为负数,需abs()转为正数

二、判断题

第1题

解析:

答案√,现阶段学习的编程语言都为高级语言,不会涉及到汇编语言和机器语言,高级语言需百编译转为机器语言,计算机才可执行

第2题

解析:

答案√,n%10是常见的获取个位方法

n-n/10*10也可,原数(n)-去除个位(n/10*10)=个位

第3题

解析:

答案√,10<=n<=12计算过程如题目描述一样

第4题

解析:

答案×,sqrt(N)*sqrt(N)计算有误差,不能判断相等

第5题

解析:

答案√

a=a-b时,a为-1,b为3

b=a+b时,a为-1,b为2

a=b-a时,a为3,b为2

第6题

解析:

答案√,i直到为10时,才跳出循环

第7题

解析:

答案√,第一次循环就退出了,所以i为初始值1

第8题

解析:

答案√

i为0时,j不循环

i为1时,j循环1次

i为2时,j循环2次

i为3时,j循环3次

i为4时,j循环4次

j总共循环1+2+3+4=10次,所以输出10次ok

第9题

解析:

答案√,tnt对每次的i进行累加,再累加一个0,结果相同

第10题

解析:

答案×,i为4时,会输出4

三、编程题

第1题 [GESP202503 二级] 等差矩阵

题目描述

小 A 想构造一个 n 行 m 列的矩阵,使得矩阵的每一行与每一列均是等差数列。小 A 发现,在矩阵的第 i行第 j 列填入整数 i×j,得到的矩阵能满足要求。你能帮小 A 输出这个矩阵吗?

输入格式

一行,两个正整数 n,m。

输出格式

共 n 行,每行 m 个由空格分割的整数,表示小 A 需要构造的矩阵。

输入输出样例

输入 #1

3 4

输出 #1

1 2 3 4
2 4 6 8
3 6 9 12

说明/提示

对于所有测试点,保证 1≤n,m≤50。

答案

#include <bits/stdc++.h>
using namespace std;
int main()
{
    // 1)确定矩阵大小
    int n, m;
    cin >> n >> m;
    // 2)输出矩阵
    for (int i = 1; i <= n; i++)
    { // 当前等差
        for (int j = i; j <= m * i; j += i)
        { // 当前数列
            cout << j << " ";
        }
        cout << endl;
    }
}

第2题 [GESP202503 二级] 时间跨越

题目描述

假设现在是 y 年 m 月 d 日 h 时而 k 小时后是 y′ 年 m′ 月 d′ 日 h′ 时,对于给定的 y,m,d,h,k,小杨想请你帮他计算出对应的 y′,m′,d′,h′ 是多少。

输入格式

输入包含五行,每行一个正整数,分别代表 y,m,d,h,k。

输出格式

输出四个正整数,代表 y′,m′,d′,h′。

输入输出样例

输入 #1

2008
2
28
23
1

输出 #1

2008 2 29 0

说明/提示

对于全部数据,保证有 2000≤y≤3000,1≤m≤12,1≤d≤31,0≤h≤23,1≤k≤24。数据保证为合法时间。

闰年判断规则

  • 普通闰年:年份能被 4 整除,但不能被 100 整除。
  • 世纪闰年:年份能被 400 整除。

满足以上任意一条规则的年份就是闰年,否则是平年。

答案

#include <bits/stdc++.h>
using namespace std;
int main(){
    //1)输入时间ymdh,经过时间k
	int y,m,d,h,k;
	cin>>y>>m>>d>>h>>k;
	int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	//2)模拟"一天一天的走"
	h+=k;
	while(h>=24){ 
		//2.1)"小时"进位 
		h-=24;
		//2.2)"日"进位 
		d+=1;
		if(y%100!=0&&y%4==0||y%400==0) arr[2]=29;//解决闰年问题
		else arr[2]=28;
		if(d>arr[m]){
			d=1;
			m+=1;
			//2.3)"月"进位
			if(m>12){
				y+=1;
				m=1;
			} 
		}
	}
	//3)输出走完的日期
	cout<<y<<" " <<m<<" "<<d<<" "<<h;
}

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐