CCF-GESP 等级考试 2025年9月认证C++三级真题 - 编程题 解析
2025年9月真题
一、单选题(每题2分,共30分)
哈哈,还没有
二、判断题(每题2分,共20分)
哈哈,还没有
三、编程题(每题25分,共50分)
本题考察模拟算法、数组。
解析:模拟题,严格按照题目的描述对数组进行操作即可。
操作次数未知,用while循环,操作条件是:数组还没有全为0,用作while条件不好表示,因此本题中写while(true),循环中在进行循环终止的判断。
#include<bits/stdc++.h>
using namespace std;
int n, arr[105];
int main() {cin>>n;for(int i=0; i<n; i++) cin>>arr[i];int cnt=0; //记录操作次数 while(true){int maxid=0, minn=100; //maxid:满足条件的最大值下标, minn:最小值 for(int i=0; i<n; i++){ if(arr[i]>=arr[maxid]) maxid=i;if(arr[i]!=0 && arr[i]<minn) minn=arr[i];}if(arr[maxid]==0) break; //最大值为0,即数组中已全为0 arr[maxid]-=minn; //按题目要求进行操作 cnt++; //操作次数加1 }cout<<cnt;return 0;
}
本题考察 模拟算法、数组。
本题涉及知识点还是挺多的, 需要知道每个月天数、闰年判断条件、如何求解已知当前的星期和往前过的天数(往后过的天数)的星期数、处理周期性问题、整数的格式化输出、周期性换行等
题目涉及知识点比较多,有一个不会就拿不到分,以下是参考代码:
#include<bits/stdc++.h>
using namespace std;
int n, months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main() {cin>>n;cout<<"MON"<<" "<<"TUE"<<" "<<"WED"<<" "<<"THU"<<" "<<"FRI"<<" "<<"SAT"<<" "<<"SUN"<<endl;int start=1; //start是月份的开始星期数,已知信息:2025 年 9 月 1 日是星期一 if(n<9){ //9月之前,往前计算天数 for(int i=8; i>=n; i--){start-=months[i];}}else if(n>9){ //9月之后,往后计算天数 for(int i=9; i<n; i++){start+=months[i];}}//计算月份n的开始星期数,往前计算会出现负数,start%7的结果可能是负数,通过加7再对7做取余运算规避 start=(start%7+7)%7; if(start==0) start=7; //余数0是星期7 for(int i=1; i<start; i++){ //输出每月1号之前的空格cout<<setw(3)<<' '<<" ";} //从1号到月底进行输出 for(int i=1; i<=months[n]; i++){cout<<setw(3)<<i<<" "; //占3个字符右对齐输出 if(start%7==0) cout<<endl; //每7天换行 start++;} return 0;
}