大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔k次就让一个平局。 输入格式: 输入首先在第一行给出正整数k(≤10),即平局间隔的次数。随后每行给出对方的一次出招:chuizi代表“锤子”、jiandao代表“剪刀”、bu代表“布”。end代表输入结束,这一行不要作为出招处理。 输出格式: 对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
时间: 2023-05-31 12:18:09 浏览: 335
稳赢 (15 分)PTA
### 回答1:
题目分析:
这道题目要求我们编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是每隔k次就让一个平局。因此我们需要记录对手出招的次数,以及上一次出平局的时间。当对手出招次数与上一次出平局的时间之差为k时,我们就出平局。否则,我们根据对手出招的情况,选择稳赢的招式。
代码实现:
我们可以使用一个字典来存储每种招式的胜负情况,然后根据对手出招的情况,选择稳赢的招式。同时,我们需要记录对手出招的次数,以及上一次出平局的时间。
代码如下:
### 回答2:
本题是一道简单的程序设计题。根据给定的胜负规则,我们可以列出每个手势对应的胜负情况:
锤子>剪刀,剪刀>布,布>锤子,同手势为平局。
因此,编写一个稳赢不输的程序,只需要记录上一次的出招,并对照上述规则给出对应的胜利招式即可。
具体来说,我们可以设定一个计数器count,每出k次就输出一个平局。同时,我们用变量pre表示上一次出的手势。当对方出招后,我们就根据上一次的手势和对方的手势,给出一个赢局的手势,并更新pre为这个手势。
以下是实现程序的伪代码:
count = 0
pre = 随机出一个手势
while (输入不为"end"):
对方出的手势为input()
if (pre=="chuizi" and 对方出"jiandao") or
(pre=="jiandao" and 对方出"bu") or
(pre=="bu" and 对方出"chuizi"):
输出"我方胜利的手势"
pre = "我方胜利的手势"
elif (pre==对方出的手势):
输出"平局的手势"
count += 1
if (count == k):
输出"平局的手势"
count = 0
else:
输出"我方失败的手势"
pre = 对方出的手势
其中,"我方胜利的手势"表示上述规则下,上一次出的手势能使我方获胜的手势;"平局的手势"表示为同一个手势。
注意:在选择“我方胜利的手势”时,可以通过随机产生的方式,避免每次出同样的手势,增加游戏的趣味性。
### 回答3:
题目描述:
这一题目要求编写一个程序实现锤子剪刀布这个游戏,但是要实现的是稳赢不输的。并且要求每隔k次就让一个平局。
输入格式:
输入首先在第一行给出正整数k(≤10),即平局间隔的次数。随后每行给出对方的一次出招:chuizi代表“锤子”、jiandao代表“剪刀”、bu代表“布”。end代表输入结束,这一行不要作为出招处理。
输出格式:
对每一个输入的出招,按要求输出稳赢或平局的招式。每招占一行。
思路:
题目中要求实现稳赢不输的程序。这里提供一种极为简单的方案,即利用一个列表在程序开始时依次存储输出的结果(锤子、剪刀、布),遇到对手出招即输出列表中的下一个招式,同时将此招式从列表中移除。当列表为空时,重新将三种招式按照锤子、剪刀、布的顺序存储进去。此方式能够稳赢不输的原因在于:以锤子为例,第一招出锤子,能赢剪刀和平局,之后出剪刀,能赢布和平局,之后出布,能赢锤子和平局,再出锤子,循环走完一遍之后又从锤子开始,所以理论上该程序是稳赢不输的。此外,题目中要求每隔k次就让一个平局,因此在程序中需要记录当前是第几次出招,当累计到第k次时,就输出一个平局即可。
代码实现:
k=int(input())
num=0 # 统计当前输出了多少次结果
list=["B","C","J"]
rest={x:0 for x in list} # 存储每个结果的输赢情况
while True:
s=input()
if s=="end":
break
else:
num+=1 # 输出次数加一
if num%(k+1)==0: # 累计到k+1,输出平局
rest[s]+=1
print("Bu")
else: # 否则从列表中输出下一个结果
index=list.index(s)
rest[s]+=1
print(list[(index+1)%3])
if num%(k+1)==0: # 当输出了一个平局,重新填装列表
list=["B","C","J"]
valid_table=sorted(rest.items(),key=lambda x:x[1],reverse=True)
max_value=valid_table[0][1]
for i in range(len(valid_table)):
if valid_table[i][1]!=max_value:
list.remove(valid_table[i][0])
else:
break
输出结果:
阅读全文