一副牌由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)輸入的兩手牌不會出現相等的情況。
答案提示:
(1)除了炸彈和對王之外,其他必須同類型比較。
(2)輸入已經保證合法性,不用檢查輸入是否是合法的牌。
(3)輸入的順子已經經過從小到大排序,因此不用再排序了.
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] left, right; String[] line; String nextLine, outString; while (sc.hasNext()) { nextLine = sc.nextLine(); //有王炸就王炸最大 if (nextLine.contains("joker JOKER")) { outString = "joker JOKER"; } else { //拆分 先拆成左右 再拆成單排 line = nextLine.split("-"); left = line[0].split(" "); right = line[1].split(" "); //炸彈最大 if (left.length == 4 && right.length != 4) { outString = line[0]; } else if (right.length == 4 && left.length != 4) { outString = line[1]; } // 牌數相同的情況下比較最小的牌的大小,compare方法返回牌所對應的值 else if (right.length == left.length) { if (count(left[0]) > count(right[0])) { outString = line[0]; } else { outString = line[1]; } } else { outString = "ERROR"; } } System.out.println(outString); } } private static int count(String str) { return "345678910JQKA2jokerJOKER".indexOf(str); } }