> 文章列表 > 日常记录:天梯赛练习集L1-044 稳赢

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

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

题目:

 

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

现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔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 <iostream>
#include <cstdio>
#include <string>
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题目地址

欢迎大家探讨