2024年3月青少年C/C++软件编程(二级)等级考试试卷及答案解析
202403C 语言二级真题编程题。
202403C 语言二级真题编程题
一、满足条件的数的累加 2
现有 n 个整数,将其中个位数为 k 的数进行累加求和。
时间限制:1000
内存限制:65536
输入
第一行 1 个整数 n。( 0 < n < 1000) 第二行 n 个非负整数,以空格分隔,每个数不大于 100000。 第三行 1 个整数 k。(0 ≤ k ≤ 9)
输出
输出满足题目要求的累加和。
样例输入
10
2 5 7 17 11 18 4 27 1 77
样例输出
58
代码:
#include <iostream>
using namespace std;
int n, k, a[1005];
int sum = 0;
int main () {
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
cin >> k;
for(int i = 1; i <= n; i++) {
if (a[i] % 10 == k) {
sum += a[i];
}
}
cout << sum;
return 0;
}
二、统一文件名
小 A 在命名文件的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将目录下的文件统一规范的格式,即文件名的第一个字符如果是字母要大写,其他字母小写。如将 Test、test 整理成 Test。
时间限制:1000
内存限制:65536
输入
第一行一个数字 n,表示有 n 个文件名要统一,n 不超过 100。 接下来 n 行,每行一个单词,长度不超过 20,表示文件的名字。文件名由字母、数字和组成。
输出
n 行,每行一个单词,对应统一后的文件名。
样例输入
4
Testdata
2-TEST
problem-6
样例输出
TestData
2-test
Problem-6
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s;
if (s[0]>='a'&&s[0]<='z')//处理首字母,如果是小写字母改成大写
{
s[0]+='A'-'a';
}
int len=s.length();
for (int j=1;j<len;j++)//循环处理其他字母
{
if (s[j]>='A'&&s[j]<='Z')//如果是大写字母改成小写
{
s[j]-='A'-'a';
}
}
cout<<s<<endl;//输出处理过的字符串
}
return 0;
}
三、Lab 杯
“Lab 杯”乒乓球赛就要在 PKU 的实验室之间举行了。人工智能实验室的学生都是乒乓球的狂热分子,都强烈希望代表实验室去比赛。但是有余名额限制,他们之中只能由一个人被选作代表。
为了让选择的过程公平,他们决定打一次单循环赛,每一对学生之间都打一场五局三胜的比赛。赢得最多比赛的人就将代表实验室去比赛。现在 Ava 手里有一份表,表里面记
录了每一场比赛的比分。她应该让谁去比赛?
时间限制:5000
内存限制:131072
输入
输入包含一组测试数据。第一行包含 n(2 ≤ n ≤ 100),实验室里学生的数目。接下来给出一个 n × n 矩阵 A。矩阵的每一个元素都是 0、1、2、3 中的一个。第 i 行第 j列的元素 aij 是第 i 个学生在和第 j 个学生的比赛中赢的局数。aij 和 aji(i ≠ j)正好有
一个是 3,另外一个小于 3。矩阵的所有对角线元素都是 0。
输出
输出赢了最多比赛的学生的编号。如果有平分,选择编号最小的。
样例输入
4
0 0 3 2
3 0 3 1
2 2 0 2
3 3 3 0
样例输出
4
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
int a[105][105];
int ans;
int mx = 0;
int main() {
cin >> n;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
for(int i = 1; i <= n; i++) {
int cnt = 0; //记录第i名同学赢了几局
for(int j = 1; j <= n; j++) {
if(a[i][j] == 3) {
cnt++;
}
}
if (cnt > mx) {
mx = cnt;
ans = i;
}
}
cout << ans;
return 0;
}
四、整数排序
给定 10 个整数的序列,要求对其重新排序。排序要求:1.奇数在前,偶数在后;2.奇数按从大到小排序;3.偶数按输入顺序逆序排序。
时间限制:1000
内存限制:65536
输入
输入一行,包含 10 个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于 100。
输出
按照要求排序后输出一行,包含排序后的 10 个整数,数与数之间以一个空格
分开。
样例输入
4 7 3 13 11 12 0 47 34 98
样例输出
47 13 11 7 3 98 34 0 12 4
代码:
#include <bits/stdc++.h>
using namespace std;
struct node {
int id;
int a;
} a[15];
bool cmp(node x, node y) {
if (x.a % 2 == 0 && y.a % 2 == 0) {//都是偶数
return x.id > y.id;//按输入顺序的逆序排列
} else if (x.a % 2 == 1 && y.a % 2 == 1) {//都是奇数
return x.a > y.a;//按从大到小排列
} else {//一个奇数一个偶数
return (x.a % 2 == 1);//奇数排在前面
}
}
int main() {
for(int i = 1; i <= 10; i++) {
cin >> a[i].a;
a[i].id = i;
}
sort(a + 1, a + 11, cmp);
for(int i = 1; i <= 10; i++) {
cout << a[i].a << " ";
}
return 0;
}
五、石头剪刀布
石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。
一天,小 A 和小 B 正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断
循环的。请问,小 A 和小 B 比了 N 轮之后,谁赢的轮数多?
时间限制:1000
内存限制:65536
输入
输入包含三行。 第一行包含三个整数:N,NA,NB,分别表示比了 N 轮,小 A 出拳的周期长度,小 B 出拳的周期长度。0 < N,NA,NB < 100。 第二行包含 NA 个整数,表示小 A 出拳的规律。 第三行包含 NB 个整数,表示小 B 出拳的规律。 其中,0 表示“石头”,2 表示“剪刀”,5 表示“布”。相邻两个整数之间用单个空格隔开。
输出
输出一行,如果小 A 赢的轮数多,输出 A;如果小 B 赢的轮数多,输出 B;如果两人打平,输出 draw。
样例输入
10 3 4
0 2 5
0 5 0 2
样例输出
A
提示
对于测试数据,猜拳过程为: A:0 2 5 0 2 5 0 2 5 0 B:0 5 0 2 0 5 0 2 0 5 A 赢了 4 轮,B 赢了 2 轮,双方打平 4 轮,所以 A 赢的轮数多。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, na, nb;
int a[105];
int b[105];
int wa = 0, wb = 0;
int main() {
cin >> n >> na >> nb;
for(int i = 0; i < na; i++) {
cin >> a[i];
}
for(int i = 0; i < nb; i++) {
cin >> b[i];
}
for(int i = 0; i < n; i++) {
int aa = a[i % na];
int bb = b[i % nb];
if (aa == bb) {
continue;
}
if (aa == 0 && bb == 2 || aa == 2 && bb == 5 || aa == 5 && bb == 0) {
wa++;
} else {
wb++;
}
}
if (wa > wb) {
cout << "A";
} else if (wa < wb) {
cout << "B";
} else {
cout << "draw";
}
return 0;
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)