L1-044 稳赢(15)
题目要求
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:
ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。
输出格式
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
分析
本题即石头剪刀布的游戏,只允许赢和平局两种情况,可以写分别写两个函数,要赢的话针对石头剪刀布该出什么,要平局的直接出与对方相同即可。
每隔K次要赢一次,因此还需要对平局次数进行计数,满足间隔次数,则赢一次,并重新开始计算平局次数。
需要注意的是:输入以End结束,当输入End时,后面的不再进行判断
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//赢
string Win(string str){
string output;
if(str == "ChuiZi"){
output = "Bu";
}
if(str == "JianDao"){
output = "ChuiZi";
}
if(str == "Bu"){
output = "JianDao";
}
return output;
}
//平局
string Ping(string str){
return str;
}
int main(){
int K;//平局间隔次数
int num = 0;//已经间隔的次数
string output;
cin >> K;
vector <string> vec;//存储出招
string signal;//手势
while(cin >> signal && signal != "End"){
vec.push_back(signal);//存入容器
}
// cout << vec.size() << endl;
//遍历vec中的手势
for(int i = 0;i < vec.size();i++ ){
// cout << vec[i] << endl;
//如果没到间隔次数
if(num != K){
output = Win(vec[i]);//赢
num += 1;
cout << output << endl;
}else if(num == K){
output = Ping(vec[i]); //平局
num = 0; //平局间隔次数置零
cout << output << endl;
}
}
return 0;
}
标签:15,string,分题,signal,PTA,str,出招,output,平局
From: https://blog.csdn.net/LxiazichengxiL/article/details/144991492