1.13寒假集训

本文介绍了五道C++编程题目,包括字符串红字符计数、数组反转、查找x/y关系、2x2矩阵字母计数和稳定子数组长度,展示了实际问题的解决方案。
摘要由CSDN通过智能技术生成

晚上兼职下班回来才有时间写题,早上根本起不来

A:

解题思路:我第一开始以为只要满足两个red以上的字母数量就行,但是过不了,后面才发现是red字符串,直接三个三个判断就行。

下面是c++代码:

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    string s;
    int r = 0,e = 0,d = 0,sum = 0;
    cin >> s;
    for(int i = 0;i < s.length() - 2;i++){
        if(s[i] == 'r' && s[i + 1] == 'e' && s[i + 2] == 'd'){
            sum++;
        }
    }
    if(sum >= 2){
        cout << "Yes";
    }else{
        cout << "No";
    }
    return 0;
}

B:

解题思路:看示例不难发现只要倒着输出数组就好,我最开始还想模拟题意进行两次翻转。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,arr[100][100];
    cin >> n;
    for(int i = 0;i < n;i++){
        for(int j = 0;j < n;j++){
            cin >> arr[i][j];
        }
    }
    for(int i = n - 1;i >= 0;i--){
        for(int j = n - 1;j >= 0;j--){
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}

C:

解题思路:只要判断x这个数左边或者右边是否等于y即可

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,x,y,arr[200000];
    cin >> n;
    for(int i = 0;i < n;i++){
        cin >> arr[i];
    }
    cin >> x >> y;
    for(int i = 1;i < n - 1;i++){
        if(arr[i] == x && (arr[i + 1] == y || arr[i - 1] == y)){
            cout << "Yes";
            return 0;
        }
    }
    cout << "No";
    return 0;
}

D:

解题思路:

遍历每一个元素的2 * 2 矩阵就好,注意遍历到n - 1行m - 1列就行,如果遍历到n行或者m列,那么就没有2 * 2矩阵了,在判断每个2 * 2矩阵里y o u 三个字母数量最小值是否为1就行。

下面是c++代码:

#include<iostream>
using namespace std;
char arr[1000][1000];
int main()
{
    int n,m,y = 0,o = 0,u = 0,sum = 0;
    cin >> n >> m;
    for(int i = 0;i < n;i++){
        for(int j = 0;j < m;j++){
            cin >> arr[i][j];
        }
    }
    for(int i = 0;i < n - 1;i++){
        for(int j = 0;j < m - 1 ;j++){
            y = 0,o = 0,u = 0;
            for(int k = i;k < i + 2;k++){
                for(int f = j;f < j + 2;f++){
                    if(arr[k][f] == 'y'){
                        y++;
                    }else if(arr[k][f] == 'o'){
                        o++;
                    }else if(arr[k][f] == 'u'){
                        u++;
                    }
                }
            }
            if(min(min(y,o),u) == 1){
                sum++;
            }
        }
    }
    cout << sum;
    return 0;
}

E:

解题思路:

定义初始长度为1,找到稳定数组就加一,不是就重新赋值为1,将每一次的稳定子数组长度与Max比较找最大值。

下面是c++代码:

#include<iostream>
using namespace std;
int main()
{
    int n,arr[100000],Max = 0,sum = 1;
    cin >> n;
    for(int i = 0;i < n;i++){
        cin >> arr[i];
    }
    for(int i = 1;i < n;i++){
        if(abs(arr[i] - arr[i - 1]) <= 1){
            sum++;
            Max = max(Max,sum);
        } else{
            sum = 1;
        }
    }
    cout << Max;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值