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;
}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐