2024年3月c++2级考级答案

一、满足条件的数的累加 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 main(){
    int na[100],nb[100],n,n1,n2,cnta=0,cntb=0;
    cin>>n>>n1>>n2;
    for (int i=0;i<n1;i++){
        cin>>na[i];    
    }    
    for (int i=0;i<n2;i++){
        cin>>nb[i];
    }    
    for (int i=0,j=n1;j<n;i++){
        na[j+=1]=na[i];
    }    
    for (int i=0,j=n2;j<n;i++){
        nb[j+=1]=nb[i];
    }
    for (int i=0;i<n;i++){
        if ((na[i]==0&&nb[i]==2)||(na[i]==2&&nb[i]==5)||(na[i]==5&&nb[i]==0)){
            cnta++;
        }else if ((na[i]==2&&nb[i]==0)||(na[i]==5&&nb[i]==2)||(na[i]==0&&nb[i]==5)){
            cntb++;
        }else{
            continue;
        }
    }
    if (cnta>cntb){
        cout<<'A';
    }else if (cntb>cnta){
        cout<<'B';
    }else if (cnta==cntb){
        cout<<"draw";
    }
    return 0;
}

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值