Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【模拟】蛇形矩阵 / z字形变换 / 数青蛙 / 牛牛冲钻五

【模拟】蛇形矩阵 / z字形变换 / 数青蛙 / 牛牛冲钻五

作者头像
_小羊_
发布于 2025-04-09 00:35:47
发布于 2025-04-09 00:35:47
5700
代码可运行
举报
文章被收录于专栏:C++C++
运行总次数:0
代码可运行

简写单词

BC149 简写单词

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str, ret;
    getline(cin, str);
    char ch = str[0];
    if (ch >= 'a' && ch <= 'z') ch -= 32;
    ret += ch;
    for (int i = 1; i < str.size(); i++)
    {
        if (str[i] == ' ')
        {
            char ch = str[i + 1];
            if (ch >= 'a' && ch <= 'z') ch -= 32;
            ret += ch;
        }
    }
    cout << ret << endl;
    return 0;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str;
    while (cin >> str)
    {
        char ch = str[0];
        if (ch >= 'a' && ch <= 'z') ch -= 32;
        cout << ch;
    }
    return 0;
}

牛牛的快递

BC64 牛牛的快递

我还是太菜了,这题做了十多分钟…

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int main() 
{
    float a;
    char b;
    cin >> a >> b;
    int ret = 20; // 起步价20
    if (b == 'y') ret += 5;
    if (a > 1)
    {
        a--;
        while (a > 0)
        {
            ret++;
            a--;
        }
    } 
    cout << ret;
    return 0;
}

蛇形矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int arr[101][101];
int dx[4] = { -1, 0, 1, 0 }, dy[4] = { 0, 1, 0, -1 };

int main()
{
    int n, m;
    cin >> n >> m;
    int a = 0, b = 0, d = 1;
    for (int i = 1; i <= n * m; i++)
    {
        arr[a][b] = i;
        int x = a + dx[d], y = b + dy[d];
        // 如果走到边界,或者该位置已经填过了,此时改变方向
        if (x < 0 || x == n || y < 0 || y == m || arr[x][y])
        {
            d = (d + 1) % 4;
            x = a + dx[d], y = b + dy[d];
        }
        a = x, b = y;
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << arr[i][j] << " ";
        cout << endl;
    }
    return 0;
}

螺旋矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int dx[4] = { -1, 0, 1, 0 }, dy[4] = { 0, 1, 0, -1 };
        int m = matrix.size(), n = matrix[0].size();
        vector<int> ret(m * n);
        vector<vector<bool>> used(m, vector<bool>(n));
        int a = 0, b = 0, d = 1; // 开始的方向是向右
        for (int i = 0; i < m * n; i++)
        {
            ret[i] = matrix[a][b];
            used[a][b] = true;
            int x = a + dx[d], y = b + dy[d];
            if (x < 0 || x == m || y < 0 || y == n || used[x][y])
            {
                d = (d + 1) % 4;
                x = a + dx[d], y = b + dy[d];
            }
            a = x, b = y;
        }
        return ret;
    }
};

除2!

先把所有的数加起来,在这个过程之中把偶数放到堆中,在遍历这个全是偶数的堆k次,每次让所有数之和减去最大偶数的一半,如果最大偶数除2后还是偶数还要重新添加到堆中,在这个过程中还要关注堆是否已经空了。

这道题还需要关注数据范围的问题,很明显需要用到 long long 类型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
priority_queue<ll> q;
ll n, k, t, sum = 0;

int main()
{
    cin >> n >> k;
    while (n--)
    {
        cin >> t;
        sum += t;
        // 把偶数存进堆
        if (t % 2 == 0) q.push(t);
    }
    while (!q.empty() && k--)
    {
        t = q.top() / 2;
        q.pop();
        sum -= t;
        if (t % 2 == 0) q.push(t);
    }
    cout << sum << endl;
    return 0;
}

替换所有的问号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string modifyString(string s) {
        int n = s.size();
        for (int i = 0; i < n; i++)
            if (s[i] == '?')
                for (char ch = 'a'; ch <= 'z'; ch++)
                    if ((i == 0 || s[i - 1] != ch) && (i == n - 1 || s[i + 1] != ch))
                        s[i] = ch;
        return s;
    }
};

提莫攻击

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int findPoisonedDuration(vector<int>& timeSeries, int duration) {
        int ret = duration;
        for (int i = 1; i < timeSeries.size(); i++)
        {
            int tmp = timeSeries[i] - timeSeries[i - 1];
            if (tmp >= duration) ret += duration;
            else ret += tmp;
        }
        return ret;
    }
};

Z 字形变换

画图,找规律、然后模拟实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string convert(string s, int numRows) {
        if (numRows == 1) return s;
        int n = s.size();
        int d = 2 * numRows - 2;
        string ret;
        // 1.处理第一行
        for (int i = 0; i < n; i += d)
            ret += s[i];
        // 2.处理第k行
        for (int k = 1; k < numRows - 1; k++)
        {
            for (int i = k, j = d - k; i < n || j < n; i += d, j += d)
            {
                if (i < n) ret += s[i];
                if (j < n) ret += s[j];
            }
        }
        // 3.处理最后一行
        for (int i = numRows - 1; i < n; i += d)
            ret += s[i];
        return ret;
    }
};

外观数列

硬模拟,毫无技巧可言。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    string countAndSay(int n) {
        string ret("1");
        while(--n)
        {
            string tmp;
            for (int l = 0, r = 0; r < ret.size();)
            {
                while (ret[l] == ret[r]) r++;
                tmp += to_string(r - l) + ret[l];
                l = r;
            }
            ret = tmp;
        }
        return ret;
    }
};

数青蛙

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int minNumberOfFrogs(string croakOfFrogs) {
        string str("croak");
        int n = str.size();
        vector<int> hash(n);
        unordered_map<char, int> index(n); // 绑定字符和下标
        for (int i = 0; i < n; i++) index[str[i]] = i;
        for (auto ch : croakOfFrogs)
        {
            if (ch == 'c')
            {
                if (hash[n - 1]) hash[n - 1]--;
                hash[0]++;
            }
            else
            {
                int i = index[ch];
                if (hash[i - 1] == 0) return -1;
                hash[i - 1]--;
                hash[i]++;
            }
        }
        for (int i = 0; i < n - 1; i++) 
            if (hash[i]) return -1;
        return hash[n - 1];
    }
};

牛牛冲钻五

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
using namespace std;

int main()
{
    int t; cin >> t;
    while (t--)
    {
        int n, k;
        cin >> n >> k;
        string str; cin >> str;
        int ret = 0, count = 0;
        for (auto ch : str)
        {
            if (ch == 'W' && count >= 2) ret += k;
            else if (ch == 'W') ret++, count++;
            else ret--, count = 0;
        }
        cout << ret << endl;
    }
    return 0;
}

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法】前缀和、模拟、位运算、差分
先把所有的数加起来,在这个过程之中把偶数放到堆中,在遍历这个全是偶数的堆k次,每次让所有数之和减去最大偶数的一半,如果最大偶数除2后还是偶数还要重新添加到堆中,在这个过程中还要关注堆是否已经空了。
_小羊_
2025/03/15
420
【算法】前缀和、模拟、位运算、差分
【C++】模拟(例题 & 学习)
模拟题目通常具有码量大、操作多、思路繁复的特点。由于它代码量大,经常会出现难以查错的情况,如果在考试中写错是相当浪费时间的。
IsLand1314
2024/10/15
1070
【C++】模拟(例题 & 学习)
【算法】模拟
模拟算法就是根据题目所给的照葫芦画瓢。 考察的是代码能力。 步骤:1.模拟算法流程(一定得自己先过一遍流程) 2.把流程转化为代码
zxctscl
2024/04/15
1080
【算法】模拟
深度解析算法之模拟
题目链接 给你一个仅包含小写英文字母和 '?' 字符的字符串 s,请你将所有的 '?' 转换为若干小写字母,使最终的字符串不包含任何 连续重复 的字符。
凯子坚持C
2025/04/24
710
深度解析算法之模拟
【优先算法】专题——模拟(详细讲解)
找到我们要替换的字符然后依次进行判断,我们用a~z依次尝试放在这个位置是否可以,需要保证这个字符不能和前面这个字符还有后面那个字符相等即可。(替换用a~z来替换)
用户11375356
2025/02/21
680
【优先算法】专题——模拟(详细讲解)
【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
给定一个仅包含小写英文字母和 ? 字符的字符串 s,请将所有的 ? 转换为若干小写字母,使得最终的字符串不包含任何连续重复的字符。 注意:你不能修改非 ? 字符。题目保证除了 ? 字符之外,不存在连续重复的字符。 在完成所有转换(可能无需转换)后,返回最终的字符串。如果有多个解决方案,返回其中任何一个即可。
半截诗
2024/11/21
1340
【优选算法篇】算法江湖中的碎玉拾光——C++模拟题全解,踏步逐章细细品味
【优选算法】Simulation-Phoenix:模拟算法的重生涅槃
本篇是优选算法之模拟算法,是一种依据问题给定的规则与逻辑,按步骤细致地重现事件的发展流程,进而获取最终结果的算法
DARLING Zero two
2025/01/20
710
【优选算法】Simulation-Phoenix:模拟算法的重生涅槃
“模拟”专项类型题
解析:从前往后遍历字符串,判断i位置前一个和后一个有没有和 “a” 到 “z” 相等,不相等就把问好替换; 注意特殊情况 “?” 在最前面和最后面。
用户11305962
2024/11/21
400
“模拟”专项类型题
【算法】模拟
三三是该溜子
2024/12/30
710
【算法】模拟
【算法刷题指南】BFS-解决最短路问题
南桥
2024/11/23
780
【C++】BFS解决边权唯一的最短路径问题
很明显,实际情况的道路更加复杂,两个地点之间的距离不能全是1,所以边权为1的最短路问题是比较特殊,简单的最短路问题
啊QQQQQ
2024/11/19
1270
【C++】BFS解决边权唯一的最短路径问题
[笔试强训day07]
南桥
2024/05/14
1160
[笔试强训day07]
算法思想总结:模拟算法
写法1: 两个哈希表 一个存储字符和下标的映射关系,另一个用数组模拟哈希表存字符出现的次数。
小陈在拼命
2024/03/23
2680
算法思想总结:模拟算法
湖南大学程序设计竞赛新生赛(重现赛)
题目链接—点我开启传送门哦! A.题意:就是求任意两个斐波那契数列的最大公约数!
杨鹏伟
2020/09/11
5320
湖南大学程序设计竞赛新生赛(重现赛)
算法专题六: 模拟与分治快排
算法思路: 本题就是简单的模拟, 只需按照题目的思路遍历所有的字符, 如果为?则将其替换, 替换时寻找26个小写字母中符合要求的, 即前一个字符和后一个字符都不等于当前字符, 如果为第一个字符和最后一个字符就不需要判断.
用户11317877
2024/10/16
910
算法专题六: 模拟与分治快排
【算法刷题指南】模拟
南桥
2024/12/30
650
48days强训——day7
思路:遍历字符串,当遇到数字时,用双指针计算子字符串的长度。若该长度大于之前记录的最大长度,更新起始位置和最大长度。最后输出最长连续数字串。
秋邱
2025/03/30
320
48days强训——day7
Leetcode算法系列| 6. Z 字形变换
游戏开发小Y
2024/01/18
1190
Leetcode算法系列| 6. Z 字形变换
006. Z 字形变换 | Leetcode题解
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
苏南
2020/12/16
4830
006. Z 字形变换 | Leetcode题解
【蓝桥杯每日一题】3.8
每天刷一题,头发少一根;但若放弃治疗,头发掉一吨!—— 秃头警告,但坚持就是胜利
f狐o狸x
2025/03/10
430
【蓝桥杯每日一题】3.8
相关推荐
【算法】前缀和、模拟、位运算、差分
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验