【GESP】C++三级练习 luogu-B2112 石头剪子布
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★✮☆☆☆。
luogu-B2112 石头剪子布
题目要求
题目描述
石头剪子布,是一种猜拳游戏。起源于中国,然后传到日本、朝鲜等地,随着亚欧贸易的不断发展它传到了欧洲,到了近现代逐渐风靡世界。简单明了的规则,使得石头剪子布没有任何规则漏洞可钻,单次玩法比拼运气,多回合玩法比拼心理博弈,使得石头剪子布这个古老的游戏同时用于“意外”与“技术”两种特性,深受世界人民喜爱。
游戏规则:石头打剪刀,布包石头,剪刀剪布。
现在,需要你写一个程序来判断石头剪子布游戏的结果。
输入格式
第一行是一个整数 $N$,表示一共进行了 $N$ 次游戏。$1 \le N \le 100$。
接下来 $N$ 行的每一行包括两个字符串,表示游戏参与者 Player1,Player2 的选择(石头、剪子或者是布): S1,S2
字符串之间以空格隔开 S1 S2 只可能取值在
Rock
,Scissors
,Paper
(大小写敏感)中。
输出格式
输出包括 $N$ 行,每一行对应一个胜利者(Player1 或者 Player2),或者游戏出现平局,则输出
Tie
。
输入输出样例 #1
输入 #1
1
2
3
4
3
Rock Scissors
Paper Paper
Rock Paper
输出 #1
1
2
3
Player1
Tie
Player2
题目分析
解题思路
题目要求比较两条DNA序列的相关性,通过计算相同碱基对的比例与给定阈值比较来判断。
- 解题关键点:
- 需要统计两条DNA序列中相同位置相同碱基的数量
- 计算相同碱基对占总碱基对的比例
- 将比例与给定阈值进行比较
- 具体思路:
- 输入阈值和两条DNA序列
- 遍历两条序列,统计相同位置相同碱基的数量
- 计算相同碱基对的比例(相同碱基对数量/总碱基对数量)
- 将计算出的比例与阈值比较,大于等于阈值输出”yes”,否则输出”no”
- 时间复杂度分析:
- 只需要遍历一次DNA序列,时间复杂度为O(n),其中n为序列长度
- 空间复杂度为O(1),只需要存储几个变量
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <string>
int main() {
// 读取游戏次数
int n;
std::cin >> n;
// 循环处理每一次游戏
for (int i = 0; i < n; i++) {
// 定义两个字符串变量存储两位玩家的选择
std::string str_1;
std::string str_2;
// 读取两位玩家的选择
std::cin >> str_1 >> str_2;
// 判断Player1选择石头的情况
if (str_1 == "Rock") {
if (str_2 == "Paper") { // Player2选择布,Player2获胜
std::cout << "Player2" << std::endl;
} else if (str_2 == "Scissors") { // Player2选择剪刀,Player1获胜
std::cout << "Player1" << std::endl;
} else { // Player2也选择石头,平局
std::cout << "Tie" << std::endl;
}
}
// 判断Player1选择布的情况
else if (str_1 == "Paper") {
if (str_2 == "Rock") { // Player2选择石头,Player1获胜
std::cout << "Player1" << std::endl;
} else if (str_2 == "Scissors") { // Player2选择剪刀,Player2获胜
std::cout << "Player2" << std::endl;
} else { // Player2也选择布,平局
std::cout << "Tie" << std::endl;
}
}
// Player1选择剪刀的情况
else {
if (str_2 == "Rock") { // Player2选择石头,Player2获胜
std::cout << "Player2" << std::endl;
} else if (str_2 == "Paper") { // Player2选择布,Player1获胜
std::cout << "Player1" << std::endl;
} else { // Player2也选择剪刀,平局
std::cout << "Tie" << std::endl;
}
}
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权