CSDN编程竞赛 ——— 第六期
Posted 2021dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSDN编程竞赛 ——— 第六期相关的知识,希望对你有一定的参考价值。
CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
文章目录
第六期竞赛题目
一、严查枪火
1、题目描述
X国最近开始严查枪火。像是 “ a k ” “ak” “ak”, “ m 4 a 1 ” “m4a1” “m4a1”, “ s k r ” “skr” “skr”都是明令禁止的。 现在小Q查获了一批违禁物品,其中部分是枪支。小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
- 输入描述: 第一行输入整数 n ( 1 ≤ n ≤ 1000 ) n(1≤n≤1000) n(1≤n≤1000)表示携带违禁物品的人数。以下 n n n 行表示违禁物品的名称。
- 输出描述: 输出需要按照私藏枪火来关押的人。
示例:
输入:3
Dsd
ak
232asd
输出:1
2、代码实现
解题步骤如下:
- 依次读取输入的每个字符串,统计读取到的字符串中 “ a k ” “ak” “ak”, “ m 4 a 1 ” “m4a1” “m4a1”和 “ s k r ” “skr” “skr”的个数并进行输出。
代码如下:
//严查枪火
#include <iostream>
#include <string>
using namespace std;
int main()
int n = 0;
cin >> n;
string s;
int count = 0;
for (int i = 0; i < n; i++)
cin >> s;
if (s == "ak" || s == "m4a1" || s == "skr")
count++;
cout << count << endl;
return 0;
二、鬼画符门
1、题目描述
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理,但是这次鬼艺接手了,你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗?
- 输入描述: 第一行输入整数 n ( 1 ≤ n ≤ 1000 ) n(1≤n≤1000) n(1≤n≤1000),以下 n n n 行输入 n n n 个字符串,代表消耗的鬼画符。
- 输出描述: 输出消耗数量最多的鬼画符(字符串),无需考虑多种鬼画符消耗数量相同的情况。
示例:
输入:5
red
red
green
green
hen
输出:red
2、代码实现
解题步骤如下:
- 借助unordered_map容器统计每个鬼画符消耗的数量。
- 遍历unordered_map容器,找出消耗数量最多的鬼画符。
代码如下:
//鬼画符门
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
int n = 0;
cin >> n;
//统计每个鬼画符消耗的数量
unordered_map<string, int> um;
string s;
for (int i = 0; i < n; i++)
cin >> s;
um[s]++;
//找出消耗数量最多的鬼画符
int mCount = 0;
string ret;
for (auto e : um)
if (e.second > mCount)
mCount = e.second;
ret = e.first;
cout << ret << endl;
return 0;
三、收邮件箱
1、题目描述
已知字符串 s t r str str, s t r str str 表示邮箱的不标准格式。其中 “ . ” “.” “.”会被记录成 “ d o t ” “dot” “dot”, “ @ ” “@” “@”会被记录成 “ a t ” “at” “at”。
写一个程序将 s t r str str 转换成可用的邮箱格式。(可用格式中字符串中除了开头结尾,所有 “ d o t ” “dot” “dot”都会被转换, “ a t ” “at” “at”只会被转换一次,开头结尾的不转换)
- 输入描述: 输入字符串 s t r ( 1 ≤ s t r l e n ( s t r ) ≤ 1000 ) str(1≤strlen(str)≤1000) str(1≤strlen(str)≤1000)。
- 输出描述: 输出转换后的格式。
示例:
输入:mxyatoxcoderdotcom
输出:mxy@oxcoder.com
2、代码实现
解题步骤如下:
- 依次遍历所给字符串中的每个字符。
- 当遍历到连续的‘d’、‘o’、‘t’字符时,如果‘d’字符不位于字符串开头,并且‘t’字符不位于字符串结尾,则将这三个字符串转换成‘.’。
- 当遍历到连续的‘a’、‘t’字符时,如果‘a’字符不位于字符串开头,并且‘t’字符不位于字符串结尾,并且之前没有转换过‘at’,则将这两个字符串转换成‘@’。
代码如下:
//收邮件箱
#include <iostream>
#include <string>
using namespace std;
int main()
string str;
cin >> str;
string ret;
size_t pos = 0;
bool flag = false;
while (pos < str.size())
if ((pos != 0) && (pos + 2 != str.size() - 1) &&
(str[pos] == 'd') && (pos + 1 < str.size() && str[pos + 1] == 'o') && (pos + 2 < str.size() && str[pos + 2] == 't'))
ret += '.';
pos += 3;
else if ((flag == false) && (pos != 0) && (pos + 1 != str.size() - 1) &&
(str[pos] == 'a') &&(pos + 1 < str.size() && str[pos + 1] == 't'))
ret += '@';
pos += 2;
flag = true;
else
ret += str[pos];
pos++;
cout << ret << endl;
return 0;
四、最长递增的区间长度
1、题目描述
给一个无序数组,求最长递增的区间长度,如:[5, 2, 3, 8, 1, 9],最长区间2, 3, 8长度为3。
- 输入描述: 第一行输入整数 n ( 1 ≤ n ≤ 1000 ) n(1≤n≤1000) n(1≤n≤1000)表示数组的大小,第二行给出 n n n 个整数 a ( − 1 e 9 ≤ a ≤ 1 e 9 ) a(-1e^9≤a≤1e^9) a(−1e9≤a≤1e9)。
- 输出描述: 输出数组中最长递增区间的长度。
示例:
输入:6
5 2 3 8 1 9
输出:3
2、代码实现
解题步骤如下:
- 遍历所给数组,遍历的同时用mCount记录下当前最长递增区间的长度,用count记录下当前递增区间的长度。
- 当count的值超过mCount的值时则对mCount的值进行更新,当遍历到的数字小于前一个数字时则将count的值清0。
代码如下:
//最长递增的区间长度
#include <iostream>
#include <vector>
using namespace std;
int main()
int n = 0;
cin >> n;
//读取数组
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
//找出最长递增区间的长度
int mCount = 0;
int count = 0;
for (int i = 1; i < n; i++)
if (v[i] - v[i - 1] > 0)
count++;
if (count > mCount)
mCount = count;
else
count = 0;
cout << mCount + 1 << endl;
return 0;
以上是关于CSDN编程竞赛 ——— 第六期的主要内容,如果未能解决你的问题,请参考以下文章