扎金花

题目描述

两个搜狐的程序员加了一个月班,终于放假了,于是他们决定扎金花渡过愉快的假期 。

游戏规则:
共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 代表不合法的输入

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

输出例子:
1
1
-1
-1
1
1
-1

分析:
1. 有输入不合法状态
2. 比较顺序: 牌型–大小
3. 比较大小时, 我们需要将字符串转化为数字

解题思路:

输入的2个字符串为stringA, stringB
1. 分别遍历字符串stringA, stringB, 将其转换为3个数字 a1, a2, a3, b1, b2, b3, 数字范围是[2, 14],范围超出直接返回-2
2.判断A, B的类型并排序:
res[0]代表类型:0-离散 1-对子 2-顺子 3-豹子
res[1] ~ res[3] 依次递减

deltab = a-b deltac = a-c
deltab = 2, deltac = 1  res={2, a, c, b}
deltab = 2, deltac = 0  res={1, a, c, b}

deltab = 1, deltac = 2  res={2, a, b, c}
deltab = 1, deltac = -1  res={2, c, a, b}
deltab = 1, deltac = 0  res={1, a, c, b}

deltab = 0, deltac = 0  res={3, a, b, c}
deltab = 0, deltac != 0  res={1, a, b, c}

deltab = -1, deltac = 1  res={2, b, a, c}
deltab = -1, deltac = -1  res={2, b, c, a}
deltab = -1, deltac = 0  res={1, b, a, c}

deltab = -2, deltac = -1  res={2, b, c, a}
deltab = -2, deltac = 0  res={1, b, a, c}

其他的均为离散型{0, x, x, x}

3.比较数组的各位大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值