一、问题描述
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。
输入格式:
输入首先在第一行给出正整数K(≤10),即平局间隔的次数。随后每行给出对方的一次出招:ChuiZi
代表“锤子”、JianDao
代表“剪刀”、Bu
代表“布”。End
代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
输入样例:
2
ChuiZi
JianDao
Bu
JianDao
Bu
ChuiZi
ChuiZi
End
输出样例:
Bu
ChuiZi
Bu
ChuiZi
JianDao
ChuiZi
Bu
二、设计思路
1、从键盘接收一个k,即平局间隔的次数;
2、用while(1)死循环来接收字符串,代表对方的每一次出招,如果是“End”就break结束,如果不是则对应进行判断;
3、定义一个变量count来记录赢得次数,以达到每进行k局就平局的要求,初始值为0;
4、当count!=k时,如果对方出“石头”,就输出“布”,如果对方出“布”,就输出“剪刀”,如果对方出“剪刀”,就输出“石头”,当count==k时,对方出啥我就输出啥,并在输出完后将count置为0;
三、程序流程图
四、伪代码
五、代码
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int k; 6 cin >> k; 7 int i = 0; 8 getchar(); 9 int count = 0; 10 while (1) 11 { 12 string s; 13 cin >> s; 14 if (s == "End") 15 { 16 break; 17 } 18 if (count == k) 19 { 20 cout << s << endl; 21 count = 0; 22 } 23 else 24 { 25 count++; 26 if (s == "ChuiZi") 27 { 28 cout << "Bu" << endl; 29 } 30 else if (s == "Bu") 31 { 32 cout << "JianDao" << endl; 33 } 34 else if (s == "JianDao") 35 { 36 cout << "ChuiZi" << endl; 37 } 38 } 39 } 40 return 0; 41 }
六、总结
1、while(1)是一个死循环,可以从键盘接收无限次数据,直到出现不满足要求的数据;
2、类似于间隔n次就出现一次特殊情况的问题,可以定义一个变量作为计数器,初始值为0,当计数器等于n时特殊处理,过后再将计数器置为0;
标签:count,输出,平局,Bu,L1,稳赢,044,ChuiZi From: https://www.cnblogs.com/lian369/p/17401896.html