首页 > 试题广场 >

扎金花

[编程题]扎金花
  • 热度指数:3528 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
 两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。 游戏规则: 共52张普通牌,牌面为2,3,4,5,6,7,8,9,10,J,Q,K,A之一,大小递增,各四张; 每人抓三张牌。两人比较手中三张牌大小,大的人获胜。 对于牌型的规则如下: 1.三张牌一样即为豹子 2.三张牌相连为顺子(A23不算顺子) 3.有且仅有两张牌一样为对子 豹子>顺子>对子>普通牌型 在牌型一样时,比较牌型数值大小(如AAA>KKK,QAK>534,QQ2>10104) 在二人均无特殊牌型时,依次比较三张牌中最大的。大的人获胜,如果最大的牌一样,则比较第二大,以此类推(如37K>89Q) 如二人牌面相同,则为平局。 


输入描述:
输入两个字符串代表两个玩家的牌(如"10KQ" "354"),先输入的作为玩家1,后输入的作为玩家2


输出描述:
1 代表 玩家1赢 0 代表 平局 -1 代表 玩家2赢 -2 代表不合法的输入
示例1

输入

KQ3 3Q9 10QA 6102 5810 7KK 632 74J 10102 K77 JKJ 926 68K 27A

输出

1 1 -1 -1 1 1 -1
while True:
    try:
        inp1,inp2=list(input().split(' '))
        #print(inp1,inp2)
        def data(inp):#用于识别数字10
            num=0
            re1=[]
            for i in inp:
                if i!='1'and i!='0':
                    re1.append(i)
                elif i=='1':
                    num+=1
            result=[]
            if num!=0:
                for i in range(num):
                    result.append('10')
            if len(re1)!=0:
                for i in re1:
                    result.append(i)
            return result

        inp1=data(inp1)
        inp2=data(inp2)   
        list1=['2','3','4','5','6','7','8','9','10','J','Q','K','A']
        def isbaozi(inp):
            re=False
            for i in inp:
                if inp.count(i)==3:
                    re=True
                    break
            return re
        def isduizi(inp):
            re=False
            for i in inp:
                if inp.count(i)==2:
                    re=True
                    break
            return re
        def isshunzi(inp):
            re=[]
            for i in inp:
                re.append(list1.index(i))
            re=sorted(re)
            if re[0]+1==re[1] and re[1]+1==re[2]:
                return True
            else:
                return False
        if isbaozi(inp1):
            if isbaozi(inp2):
                if list1.index(inp1[0])>list1.index(inp2[0]):
                    print(1)
                elif list1.index(inp1[0])<list1.index(inp2[0]):
                    print(-1)
                else:
                    print(0)
            else:
                print(1)
        elif isshunzi(inp1):
            if isshunzi(inp2):
                if list1.index(inp1[0])>list1.index(inp2[0]):
                    print(1)
                elif list1.index(inp1[0])<list1.index(inp2[0]):
                    print(-1)
                else:
                    print(0)
            elif isbaozi(inp2):
                print(-1)
            else:
                print(1)
        elif isduizi(inp1):
            if isduizi(inp2):
                for i in inp1:
                    if inp1.count(i)==2:
                        break
                for j in inp2:
                    if inp2.count(j)==2:
                        break
                if list1.index(i)>list1.index(j):
                    print(1)
                elif list1.index(i)<list1.index(j):
                    print(-1)
                else:
                    print(0)
            elif isbaozi(inp2) or isshunzi(inp2):
                print(-1)
            else:
                print(1)
        else:
            if isbaozi(inp2) or isshunzi(inp2) or isduizi(inp2):
                print(-1)
            else:
                re1=[]
                re2=[]
                for i in inp1:
                    re1.append(list1.index(i))
                for j in inp2:
                    re2.append(list1.index(j))
                re1=sorted(re1,reverse=True)
                re2=sorted(re2,reverse=True)
                if re1[0]>re2[0]:
                    print(1)
                elif re1[0]<re2[0]:
                    print(-1)
                else:
                    if re1[1]>re2[1]:
                        print(1)
                    elif re1[1]<re2[1]:
                        print(-1)
                    else:
                        if re1[2]>re2[2]:
                            print(1)
                        elif re1[2]<re2[2]:
                            print(-1)
                        else:
                            print(0)
    except:
        break

主要是数字10要注意识别出来,其余的还好
编辑于 2019-07-23 15:46:01 回复(0)

问题信息

难度:
1条回答 14251浏览

热门推荐

通过挑战的用户

查看代码
扎金花