CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
(请不要删掉此地址)
1. 题目名称:严查枪火
X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。 小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)
根据题意,即要判断给定的字符串是否等于“ak”,“m4a1”,“skr”这三个字符串。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, ans = 0;
cin >> n;
for (int i = 0; i < n; ++i)
{
string s;
cin >> s;
if (s == "ak" || s == "m4a1" || s == "skr")
++ans;
}
cout << ans << endl;
return 0;
}
2. 题目名称:鬼画符门
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个 程序统计每年消耗数量最多的鬼画符吗?
根据题意,即要统计出现最多次数的字符串,题目保证出现次数最多的字符串唯一。可以用哈希表统计每个字符串出现的次数,然后遍历哈希表记录出现次数最多的字符串。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
unordered_map<string, int> ump;
for (int i = 0; i < n; ++i)
{
string s;
cin >> s;
++ump[s];
}
int mx = 0;
string ans = "";
for (auto it = ump.begin(); it != ump.end(); ++it)
{
if (it->second > mx)
{
mx = it->second;
ans = it->first;
}
}
cout << ans << endl;
return 0;
}
3. 题目名称:收件邮箱
已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用 的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)
根据题意,需要把输入字符串中的“dot"转换成”.",把“at"转换成”@“,模拟即可。
#include <bits/stdc++.h>
using namespace std;
string s;
int main()
{
cin >> s;
int n = s.size();
string ans = s.substr(0, 1);
for (int i = 1; i < n; ++i)
{
if (i + 3 < n && s[i] == 'd' && s[i + 1] == 'o' && s[i + 2] == 't')
{
ans += ".";
i += 2;
}
else
ans += s[i];
}
s = ans;
n = s.size();
ans = s.substr(0, 1);
for (int i = 1, ok = 1; i < n; ++i)
{
if (i + 2 < n && ok && s[i] == 'a' && s[i + 1] == 't')
{
ok = 0;
ans += "@";
++i;
}
else
ans += s[i];
}
cout << ans << endl;
return 0;
}
4. 题目名称:最长递增的区间长度
给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3。
题意要求的是连续区间的长度,但题目没说明递增是严格还是非严格,这里我当作严格递增做了。考虑以位置i结尾的区间的最长递增长度为dp[i],那么若a[i]>a[i-1],则dp[i] = dp[i-1] +1,表示区间左端点在i-1之前;否则dp[i] = 1表示区间[i, i]。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int a[maxn], dp[maxn];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> a[i];
int ans = 0;
for (int i = 1; i <= n; ++i)
{
if (a[i] > a[i - 1])
dp[i] = dp[i - 1] + 1;
else
dp[i] = 1;
ans = max(ans, dp[i]);
}
cout << ans << endl;
return 0;
}