👦个人主页:Weraphael
✍🏻作者简介:目前正在学习c++和算法
✈️专栏:【C/C++】算法
🐋 希望大家多多支持,咱一起进步!😁
如果文章有啥瑕疵
希望大佬指点一二
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍
一、题目描述
二、朴树思路及代码实现
可能很多人一开始写就是嵌套if-else
代码如下:(本人也一样)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
string a, b;
cin >> a >> b;
if (a == "Hunter")
{
if (b == "Hunter")
{
cout << "Tie" << endl;
}
else if (b == "Bear")
{
cout << "Player2" << endl;
}
else cout << "Player1" << endl;
}
else if (a == "Bear")
{
if (b == "Hunter")
{
cout << "Player1" << endl;
}
else if (b == "Bear")
{
cout << "Tie" << endl;
}
else cout << "Player2" << endl;
}
else // a == Gun
{
if (b == "Hunter")
{
cout << "Player2" << endl;
}
else if (b == "Bear")
{
cout << "Player1" << endl;
}
else cout << "Tie" << endl;
}
}
return 0;
}
三、优雅思想和代码实现
后来听了y总
的思路:我们可以将Player1
和Player2
的所有可能性映射成数字,例如,Hunter
记作0
、Gun
记作1
、Bear
记作2
。然后根据题目意思:猎人赢枪、枪赢狗熊、狗熊赢猎人,可以得出以下关系:
player1 player2
0 -> 1
1 -> 2
2 -> 0
// -> 代表赢
然后我们可以发现一些规律:
- 如果
player1 == player2
代表平局Tie
- 如果
(Player1 + 1) % 3 == Player2
的话,就代表Player1
赢 - 如果不包含以上两种情况,则
Player2
赢
于是可以写出以下【优雅代码】
#include <string>
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t --)
{
string a, b;
cin >> a >> b;
int x, y;
if (a == "Hunter") x = 0;
else if (a == "Gun") x = 1;
else x = 2;
if (b == "Hunter") y = 0;
else if (b == "Gun") y = 1;
else y = 2;
if (x == y) puts("Tie");
else if ((x + 1) % 3 == y) puts("Player1");
else puts("Player2");
}
return 0;
}