1. 程式人生 > >華為2016校招筆試程式設計題(撲克牌大小)

華為2016校招筆試程式設計題(撲克牌大小)

時間限制:10秒

空間限制:131072K
撲克牌遊戲大家應該都比較熟悉了,一副牌由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)輸入的順子已經經過從小到大排序,因此不用再排序了.

輸入描述:

輸入兩手牌,兩手牌之間用“-”連線,每手牌的每張牌以空格分隔,“-”兩邊沒有空格,如4 4 4 4-joker JOKER。

輸出描述:

輸出兩手牌中較大的那手,不含連線符,撲克牌順序不變,仍以空格隔開;如果不存在比較關係則輸出ERROR。

輸入例子1:

4 4 4 4-joker JOKER

輸出例子1:

joker JOKER

這裡輸入的長度不同並且不是題目的規定的情況時,就輸出error…….

import java.util.*;
public class Main {
    public static String str_in = new String();
    public static int count(String sub_str){
        return "3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER ".indexOf(sub_str);
    }
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in
); str_in = s.nextLine(); String [] line = str_in.split("-"); String [] line1 = line[0].split(" "); String [] line2 = line[1].split(" "); if(str_in.contains("joker JOKER")){ //看看有沒有最大的牌 System.out.println("joker JOKER"); } else if(line1.length!=line2.length){ //不相等,有可能有炸 if (line1.length==4 && line1[0].compareTo(line1[1])==0 && line1[1].compareTo(line1[2])==0 && line1[2].compareTo(line1[3])==0){ System.out.println(line[0]); } else if(line2.length==4 && line2[0].compareTo(line2[1])==0 && line2[1].compareTo(line2[2])==0 && line2[2].compareTo(line2[3])==0){ System.out.println(line[1]); } else{ //沒有炸,那麼輸出ERROR System.out.print("ERROR"); } } else{ // System.out.println(line1[0]); if(count(line1[0])>count(line2[0])){ System.out.println(line[0]); } else{ System.out.println(line[1]); } } } }