题目描述

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;

(4)输入的两手牌不会出现相等的情况。

输入描述:

输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。

输出描述:

输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

示例1

输入

4 4 4 4-joker JOKER

输出

joker JOKER

代码如下:

 package com.yzh.xuexi;

 import java.util.Scanner;

 public class PockerCompare {

     public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
String s=scanner.nextLine();
String[]arr =s.split("-");
System.out.println(pockerCompare(arr[0], arr[1]));
}
scanner.close();
} private static String pockerCompare(String pocker1,String pocker2) {
pocker1=pocker1.replace("10", "1");//10和joker、JOKER 不止一个字符,替换成一个字符表示,方便利用字符串的长度
pocker2=pocker2.replace("10", "1"); int length1=pocker1.length();
int length2=pocker2.length();
String result=null;
if (length1==11) {
result=pocker1;
return getResult(result);
}
if (length2==11) {
result= pocker2;
return getResult(result);
} if(length1==7&&length2==7){
result= compare(pocker1, pocker2)>0?pocker1:pocker2;
return getResult(result);
}
if (length1==7&&length2!=7) {
result= pocker1;
return getResult(result);
}
if (length2==7&&length1!=7) {
result= pocker2;
return getResult(result);
} if (pocker1.equals("joker")) {
pocker1="s";//10和joker、JOKER 不止一个字符,替换成一个字符表示,方便利用字符串的长度
}else if (pocker1.equals("JOKER")) {
pocker2="b";//10和joker、JOKER 不止一个字符,替换成一个字符表示,方便利用字符串的长度
}
if (pocker2.equals("joker")) {
pocker2="s";
}else if (pocker2.equals("JOKER")) {
pocker2="b";
} length1=pocker1.length();
length2=pocker2.length(); if (length1!=length2) {
result= "ERROR";
return getResult(result);
} result= compare(pocker1, pocker2)>0?pocker1:pocker2;
return getResult(result);
} private static String getResult(String result) {
return result.replace("1", "10").replace("s","joker").replace("b", "JOKER"); }
private static int compare(String pocker1,String pocker2) {
char c1=pocker1.charAt(0);
char c2=pocker2.charAt(0);
String sort="34567891JQKA2sb";
return sort.indexOf(c1) - sort.indexOf(c2);
} }

解题(PockerCompare-扑克牌比较大小)的更多相关文章

  1. Java学习--扑克牌比大小的小游戏

    实现:生成五十四张牌,然后进行洗牌,输入两名玩家,然后分别发两张牌,进行比较大小,两张牌中拥有较大一张牌的玩家获胜 Card.java代码如下: package com.cardgame; publi ...

  2. 《流畅的Python》一副扑克牌中的难点

    1.现在在看<流畅的Python>这本书,看了三页就发现,这本书果然不是让新手来入门的,一些很常见的知识点能被这个作者玩出花来, 唉,我就在想,下面要分析的这些的代码,就算我费劲巴拉的看懂 ...

  3. javascript练习-扑克牌

    下面用枚举类型来实现一副扑克牌的类: //定义一个玩牌的类 function Card(suit,rank){ function inherit(p){ if(p==null) throw TypeE ...

  4. python3模拟扑克牌

    python3.6环境 import collections from random import choice Card=collections.namedtuple('Card',['rank', ...

  5. HDU - 1962 二分图最大匹配模板(扑克牌得分最大)

    题意: 直接说数据,第一行给定几组数据,每一组数据的第一行是两个人扑克牌分别的数量,第一行是亚当的扑克牌,第二行是夏娃的扑克牌,每一个扑克牌的大小用两个字符来表示,第一个表示是几号扑克牌,第二个表示扑 ...

  6. HDU 1394

    单点,利用线段树解题,看到数据大小一定要敏感,说不定就是暗藏的解题思路 #include <stdio.h> #define lson l,mid,id<<1 #define ...

  7. 十种JAVA排序算法实例

    一.冒泡(Bubble)排序 复制代码 代码如下: void BubbleSortArray() {       for(int i=1;i<n;i++)       {         for ...

  8. IOS UIView子类UIScrollView

    转自:http://www.cnblogs.com/nightwolf/p/3222597.html 虽然apple在IOS框架中提供了很多可以直接使用的UI控件,但是在实际开发当中我们通常都是要自己 ...

  9. 第十四个目标(dp + 树状数组 + 线段树)

    Problem 2236 第十四个目标 Accept: 17    Submit: 35 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  10. Python 数据模型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 一摞Python风格的纸牌 from collections impo ...

随机推荐

  1. access oarcle

    1 默认值2 自动增加字段3 now() time() date() 更改sysdate4 datediff5 保留字 date 名字段6isnull(rowname)要改成rowname = nul ...

  2. ORACLE 监听配置

    安装后最开始如下 # listener.ora Network Configuration File: D:\oracle\app\Administrator\product\11.2.0\dbhom ...

  3. Ruby学习笔记3:Rendering(渲染)和 Redirect(重定向)

    1. Rendering Rendering 是特别要告诉Controller 中的methods,要哪个view file来显示给用户.We can show Views as we wish! E ...

  4. openStack queens 功能验证调试

    linux已经加载 的内核模块查看

  5. python入门-直方图

    使用的是pygal函数库 所以需要先安装 1 安装库文件 pip install pygal=1.7 2 创建骰子类 from random import randint class Die(): # ...

  6. 1.理解Numpy、pandas

    之前一直做得只是采集数据,而没有再做后期对数据的处理分析工作,自己也是有意愿去往这些方向学习的,最近就在慢慢的接触. 首先简单理解一下numpy和pandas:一.NumPy:1.NumPy是高性能计 ...

  7. jenkins部署配置

    https://www.cnblogs.com/rslai/p/8135460.html 修改jenkins的默认端口号: https://blog.csdn.net/qq_32440951/arti ...

  8. Redis位图实现用户签到功能

    场景需求 适用场景如签到送积分.签到领取奖励等,大致需求如下: 签到1天送1积分,连续签到2天送2积分,3天送3积分,3天以上均送3积分等. 如果连续签到中断,则重置计数,每月初重置计数. 当月签到满 ...

  9. Java的反射机制与泛型擦除

    实现方式 反编译:.class–>.java 通过反射机制访问java对象的属性,方法,构造方法等涉及类 java.lang.Class; java.lang.reflect.Construct ...

  10. air报错 Error: Error #3000: Illegal path name

    配置增加: <supportedProfiles>extendedDesktop desktop</supportedProfiles> fb: flash: