文章

【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

题目分析

解题思路

  1. 题目要求比较两条DNA序列的相关性,通过计算相同碱基对的比例与给定阈值比较来判断。

  2. 解题关键点:
    • 需要统计两条DNA序列中相同位置相同碱基的数量
    • 计算相同碱基对占总碱基对的比例
    • 将比例与给定阈值进行比较
  3. 具体思路:
    • 输入阈值和两条DNA序列
    • 遍历两条序列,统计相同位置相同碱基的数量
    • 计算相同碱基对的比例(相同碱基对数量/总碱基对数量)
    • 将计算出的比例与阈值比较,大于等于阈值输出”yes”,否则输出”no”
  4. 时间复杂度分析:
    • 只需要遍历一次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 进行授权