第二届国际赛真题试题A:猜拳
2023-12-28 11:45:23
由于在刷题库里面没找到原题,不知道我这种方法超时时长没有
试题 A:猜拳
【问题描述】
Alice、Bob 和 Cindy 一起玩猜拳的游戏。
和两个人的猜拳类似,每一轮,他们会从石头、剪刀、布中各自选一个出拳,基本的胜负规
则是石头赢剪刀、剪刀赢布、布赢石头。如果一轮中正好可以分成胜负两边,则负边的每个
人要支付给胜边的每个人一块钱。如果无法分成胜负两边,则都不出钱。
比如,如果 Alice 出石头,而 Bob 和 Cindy 都出布,则 Alice 要分支付 Bob 和 Cindy 一块钱。
再如,如果 Alice 出石头,Bob 出剪刀,Cindy 出布,则都不出钱。
他们三人共进行了 n 轮游戏,请问最后每个人净赚多少钱?即赚的钱减去支付的钱是多少?
【输入格式】
输入的第一行包含一个整数 n,表示游戏总共进行了 n 轮。
接下来 n 行,每行三个整数,分别表示 Alice、Bob 和 Cindy 一轮中所出的拳,0 表示石头,
1 表示剪刀,2 表示布。
【输出格式】
输出三个,每行一个整数,分别表示 Alice、Bob 和 Cindy 净赚的钱数。
【样例输入】
3
0 2 2
0 1 2
1 1 1
【样例输出】
-2
1
1
def check(n, x):
#初始化
score = [0, 0, 0]
lose = [0, 0, 0]
#先假定没有人胜出,lock为假
lock = False
#如果存在其中有两项相同,用于存储这两项和另一个数字不一样的位置
#相同的两项放在列表中的索引0,1
count = []
for i in range(n):
#如果三人的数字一样或者三个人都各不相同就跳过
if x[i][0] == x[i][1] == x[i][2] or (x[i][0] != x[i][1] and x[i][2] != x[i][1] and x[i][0] != x[i][2]):
continue
else:
for j in range(3):
#用于判断前者减去后者是否等于-1或2,如果是则前者胜后者输
if x[i][j] - x[i][(j + 1) % 3] == -1 or x[i][j] - x[i][(j + 1) % 3] == 2:
score[j] += 1
lose[(j + 1) % 3] += 1
#解除锁定,有人胜出
lock = True
#上同,若前者减去后者等于1或-2,则前者输后者胜
elif x[i][j] - x[i][(j + 1) % 3] == 1 or x[i][j] - x[i][(j + 1)%3]== -2:
lose[j] += 1
score[(j + 1) % 3] += 1
#解除锁定,有人胜出
lock = True
#判断是否有相同项
elif x[i][j] - x[i][(j + 1) % 3] == 0:
#前两条语句是将相同两项的位置记录下来,便于后续在相应位置做出lose或score的加分
count.append(j)
count.append((j + 1) % 3)
#不同的那一项的位置
count.append((j + 2) % 3)
elif count:
#判断,有了相同项并且有人胜出则对相应lose或score做出相应的加分
#实际上这个判断可以不要,有两个数重复那么肯定就会有输赢,因为平局(三个数相等)
#的情况已经舍去
if lock == True:
lose[count[0]] += 1
lose[count[1]] += 1
score[count[2]] += 2
#记录净赚的钱
final=[]
for m,n in zip(score, lose):
final.append(m-n)
return final
n = int(input())
x = []
for i in range(n):
x.append(list(map(int, input().split())))
result = check(n, x)
for i in result:
print(i)
文章来源:https://blog.csdn.net/xia_o_s_on/article/details/135249350
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!