日常记录:天梯赛练习集L1-044 稳赢

题目:

日常记录:天梯赛练习集L1-044 稳赢_第1张图片

 

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:

日常记录:天梯赛练习集L1-044 稳赢_第2张图片

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。

输入格式:

输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi代表“锤子”、JianDao代表“剪刀”、Bu代表“布”。End代表输入结束,这一行不要作为出招处理。

输出格式:

对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。

输入样例:

2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End

输出样例:

Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu

 解答:

题目分析:

  • 我们的输出稳赢不输
  • 每隔k次要打平一次,即每k+1次里的第k+1次必须打平
  • 输赢判断就是正常的石头剪刀布规则

操作实现:

  1. 定义string数组,存放三种招式,且后一个招式能赢前一个招式
  2. 定义cmp函数,返回一个招式,若flag为false则打平,若flag为true则取胜(找到招式a在s[]里的下标i,并返回s[(i+1)%3])
  3. 利用while循环进行输入,当输入End时退出循环
  4. 定义出招次数count,当count为k+1的倍数时表示已经赢了k次,目前这一次需要打平,每次循环之后都要进行count++

代码实现:

#include 
#include 
#include 
using namespace std;

string s[3] = {"ChuiZi", "Bu", "JianDao"};

string cmp(string a, bool flag);

int main()
{
    int k; cin >> k;
    string t; cin >> t;
    int count = 1;
    while(t != "End")
    {
        if(count % (k + 1) != 0) cout << cmp(t, true) << endl;
        else cout << cmp(t, false) << endl;
        count++;
        cin >> t;
    }
    return 0;
}

string cmp(string a, bool flag)
{
    if(!flag) return a;
    int i = 0;
    while(a != s[i]) i++;
    return s[(i + 1) % 3];
}

PTA题目地址

欢迎大家探讨

你可能感兴趣的:(PTA天梯赛练习集,c++,算法,数据结构,c语言)