题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
package main import ( "errors" "fmt" "strings" "bufio" "os" ) var a2i map[string]int func isQueueBomb(s string) bool { arr := strings.Split(s, " ") if len(arr) != 2 { return false } return arr[0] == "joker" && arr[1] == "JOKER" || arr[0] == "JOKER" && arr[1] == "joker" } func isBomb(s string) bool { arr := strings.Split(s, " ") if len(arr) == 4 { return arr[0] == arr[1] && arr[1] == arr[2] && arr[2] == arr[3] } return isQueueBomb(s) } func isGreater(s1 string, s2 string) (bool, error) { arr1 := strings.Split(s1, " ") arr2 := strings.Split(s2, " ") size1, size2 := len(arr1), len(arr2) if size1 != size2 { // fmt.Printf("s1:%s, s2:%s\n", s1, s2) var isExist1, isExist2 bool if _, ok := a2i[s1]; ok { isExist1 = true } if _, ok := a2i[s2]; ok { isExist2 = true } if isExist1 && isExist2 { return a2i[s1] > a2i[s2], nil } if !isBomb(s1) && !isBomb(s2) { return false, errors.New("Error") } // 哪个是王炸或者是炸弹,哪个最大 if isQueueBomb(s1) { return true, nil } if isQueueBomb(s2) { return false, nil } if isBomb(s1) { return true, nil } if isBomb(s2) { return false, nil } } else { if size1 == 1 && size2 == 1 { return a2i[s1] > a2i[s2], nil } else if size1 == 2 && size2 == 2 { if isQueueBomb(s1) { return true, nil } if isQueueBomb(s2) { return false, nil } return a2i[string(s1[0])] > a2i[string(s2[0])], nil } else if size1 == 3 && size2 == 3 { // pass return true, nil } else if size1 == 4 && size2 == 4 { return a2i[string(s1[0])] > a2i[string(s2[0])], nil } else if size1 == 5 && size2 == 5 { return a2i[arr1[0]] > a2i[arr2[0]], nil } } return true, nil } func main() { // 初始化对应关系 a2i = make(map[string]int, 0) for i:=3; i<10; i++ { a2i[string(byte('0' + i))] = i } a2i["10"] = 10; a2i["J"] = 11; a2i["Q"] = 12 a2i["K"] = 13 a2i["A"] = 14 a2i["2"] = 15 a2i["joker"] = 16 a2i["JOKER"] = 17 // fmt.Printf("map: %+v\n", a2i) inputReader := bufio.NewReader(os.Stdin) line, _, _ := inputReader.ReadLine() s := string(line) s1, s2 := strings.Split(s, "-")[0], strings.Split(s, "-")[1] isGreater, err := isGreater(s1, s2) if err != nil { fmt.Println("ERROR") os.Exit(0) } if isGreater { fmt.Println(s1) } else { fmt.Println(s2) } }
// 本题输入一个带空格的字符串,所以采用:inputReader.ReadLine()