文章目录

第六期竞赛题目

一、严查枪火

1、题目描述

编程竞赛 ——— 第六期_字符串编程竞赛 ——— 第六期_字符串_02编程竞赛 ——— 第六期_代码实现_03都是明令禁止的。 现在小Q查获了一批违禁物品,其中部分是枪支。小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)

  • 输入描述:第一行输入整数编程竞赛 ——— 第六期_#include_04表示携带违禁物品的人数。以下编程竞赛 ——— 第六期_字符串_05
  • 输出描述:输出需要按照私藏枪火来关押的人。

示例:

输入:3
   Dsd
   ak
   232asd
输出:1

2、代码实现

解题步骤如下:

  1. 依次读取输入的每个字符串,统计读取到的字符串中编程竞赛 ——— 第六期_字符串编程竞赛 ——— 第六期_字符串_02编程竞赛 ——— 第六期_代码实现_03的个数并进行输出。

代码如下:

//严查枪火
#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、题目描述

  鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理,但是这次鬼艺接手了,你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗?

  • 输入描述:第一行输入整数编程竞赛 ——— 第六期_#include_04,以下编程竞赛 ——— 第六期_字符串_05行输入编程竞赛 ——— 第六期_字符串_05
  • 输出描述:输出消耗数量最多的鬼画符(字符串),无需考虑多种鬼画符消耗数量相同的情况。

示例:

输入:5
   red
   red
   green
   green
   hen
输出:red

2、代码实现

解题步骤如下:

  1. 借助unordered_map容器统计每个鬼画符消耗的数量。
  2. 遍历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、题目描述

编程竞赛 ——— 第六期_代码实现_12编程竞赛 ——— 第六期_代码实现_12 表示邮箱的不标准格式。其中编程竞赛 ——— 第六期_代码实现_14会被记录成编程竞赛 ——— 第六期_代码实现_15编程竞赛 ——— 第六期_字符串_16会被记录成编程竞赛 ——— 第六期_字符串_17
  写一个程序将 编程竞赛 ——— 第六期_代码实现_12 转换成可用的邮箱格式。(可用格式中字符串中除了开头结尾,所有编程竞赛 ——— 第六期_代码实现_15都会被转换,编程竞赛 ——— 第六期_字符串_17只会被转换一次,开头结尾的不转换)

  • 输入描述:输入字符串编程竞赛 ——— 第六期_c++_21
  • 输出描述:输出转换后的格式。

示例:

输入:mxyatoxcoderdotcom
输出:mxy@oxcoder.com

2、代码实现

解题步骤如下:

  1. 依次遍历所给字符串中的每个字符。
  2. 当遍历到连续的‘d’、‘o’、‘t’字符时,如果‘d’字符不位于字符串开头,并且‘t’字符不位于字符串结尾,则将这三个字符串转换成‘.’。
  3. 当遍历到连续的‘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。

  • 输入描述:第一行输入整数编程竞赛 ——— 第六期_#include_04表示数组的大小,第二行给出编程竞赛 ——— 第六期_字符串_05个整数编程竞赛 ——— 第六期_#include_24
  • 输出描述:输出数组中最长递增区间的长度。

示例:

输入:6
   5 2 3 8 1 9
输出:3

2、代码实现

解题步骤如下:

  1. 遍历所给数组,遍历的同时用mCount记录下当前最长递增区间的长度,用count记录下当前递增区间的长度。
  2. 当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;
}