题意简述
输入两个字符串 a a a 和 b b b,表示两件衣服的尺码,要求比较两件衣服的大小,并输出对应的表示关系的符号。
衣服的有 L,M 和 S 三种尺码,M 表示中等,S 表示小,L 表示大,字母 X 表示额外的大小,X 的数量越多,程度也就越深。
比较大小的规则:
- 任意的 S 尺码都小于任意的 M 尺码和任意的 L 尺码,无论带有多少个 X
- 任意的 L 尺码都大于任意的 M 尺码和任意的 S 尺码,无论带有多少个 X
- S 前边的 X 数量越多,尺码越小
- L 前边的 X 数量越多,尺码越大
不知道是不是你谷爬虫的原因,把人家 LaTex 的源码给爬过来了,实际上输出应该只包含
<
<
<
>
>
> 和
=
=
= 这三种情况。
题目分析
主要考察模拟能力和对分支语句的掌控,只要列举好情况然后分类讨论即可。
- 我们先考虑相等的情况,显然,直接判断 string 是否相等即可。
- 然后再考虑不同的情况,这种情况我们只需要比较最后一个字符即可。
- 对于末尾字符相同的情况,要比较字符串 a a a 和 b b b 的长度。
- 对于末尾字符不同的情况,根据排列组合一共有 2 ⋅ C 3 2 = 6 2 \cdot C_3^2 = 6 2⋅C32=6 种情况,需要分别判断字符串 a a a 和 b b b 的末尾字符比较大小。
具体实现看代码吧
代码
#include <bits/stdc++.h>
using namespace std;
void solution()
{
string a, b;
cin >> a >> b;
if (a == b)
{
cout << "=" << endl;
return;
}
if (a.back() == b.back())
{
if (a.back() == 'L')
{
if (a.length() > b.length())
{
cout << ">" << endl;
return;
}
else
{
cout << "<" << endl;
return;
}
}
if (a.back() == 'S')
{
if (a.length() < b.length())
{
cout << ">" << endl;
return;
}
else
{
cout << "<" << endl;
return;
}
}
}
else if (a.back() == 'L' && b.back() == 'S')
{
cout << ">" << endl;
return;
}
else if (a.back() == 'S' && b.back() == 'L')
{
cout << "<" << endl;
return;
}
else if (a.back() == 'L' && b == "M")
{
cout << ">" << endl;
return;
}
else if (a.back() == 'S' && b == "M")
{
cout << "<" << endl;
return;
}
else if (a == "M" && b.back() == 'L')
{
cout << "<" << endl;
return;
}
else if (a == "M" && b.back() == 'S')
{
cout << ">" << endl;
return;
}
}
int main()
{
ll T = 0;
T = read();
for (ll i = 0; i < T; i++)
{
solution();
}
return 0;
}
tips:函数中每当这个分支完成且不必再往下进行的时候,直接 return 掉是个好习惯,可以避免很多错误。