PAT乙级(1008)真题 (python版本)

题目描述

大家应该都会玩“锤子剪刀布”的游戏:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。

输入描述:

输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代
表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。

输出描述:

输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。

输入例子:

10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J

输出例子:

5 3 2
2 3 5
B B

备注:主要注意一个坑点。。。如果解不唯一,则输出按字母序最小的解。

代码实现:

# C代表“锤子”、J代表“剪刀”、B代表“布”
def judge(string_A,string_B):
    if string_A == string_B:
        return 0
    if string_A =='C' and string_B == 'J':
        return 1
    if string_A == 'J' and string_B == 'B':
        return 1
    if string_A == 'B' and string_B == 'C':
        return 1
    else:
        return -1
    
def judge_dict(win_list):
    win_entity = []
    win_score = []
    for i in set(win_list):
        win_entity.append(i)
        win_score.append(win_list.count(i))       
    resultdict = dict(zip(win_entity,win_score))
    test = sorted(resultdict.items(), key=lambda x: (x[0]),reverse = False)
    result = sorted(test, key=lambda x: (x[1]),reverse = True)
    return result[0][0]

def main():
    num = int(input())
    win_A = 0
    win_B = 0
    lose_A = 0
    lose_B = 0
    draw_A = 0
    draw_B = 0
    win_list_A = []
    win_list_B = []
    A_list = []
    B_list = []
    for i in range(num):
        string_input = input().split(' ')
        string_A ,string_B = string_input[0],string_input[1]
        A_list.append(string_A)
        B_list.append(string_B)
        if judge(string_A,string_B) == 0:
            draw_A = draw_A + 1
            draw_B = draw_B + 1
        if judge(string_A,string_B) == 1:
            win_A = win_A + 1
            lose_B = lose_B + 1
            win_list_A.append(string_A)
        if judge(string_A,string_B) == -1:
            win_B = win_B + 1
            lose_A = lose_A + 1
            win_list_B.append(string_B) 
    print ("{0} {1} {2}".format(win_A,draw_A,lose_A))  
    print ("{0} {1} {2}".format(win_B,draw_B,lose_B))
    if len(win_list_A) > 0 and len(win_list_B) > 0:
        print ("{0} {1}".format(judge_dict(win_list_A),judge_dict(win_list_B)))
    if len(win_list_A) > 0 and len(win_list_B) == 0:
        print ("{0} {1}".format(judge_dict(win_list_A),'B'))
    if len(win_list_A) == 0 and len(win_list_B) > 0:
        print ("{0} {1}".format('B',judge_dict(win_list_B)))
            
        
        
if __name__ =="__main__":
    main()      

 

你可能感兴趣的:(PAT乙级真题实战)