题解 | #扑克牌大小#

扑克牌大小

http://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb

解题思路:
由于扑克牌大小顺序不按照字典序,所以按顺序存在数组里,当需要比较的时候,比一下位置先后就可以了

use std::io;
fn compare(l: &str, r: &str) -> bool {
    let order = ["3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", "joker", "JOKER",];
    let (mut left, mut right) = (0usize, 0usize);
    for (index, &s) in order.iter().enumerate() {
        if l == s {
            left = index;
        }
        if r == s {
            right = index;
        }
    }
    left > right
}

fn main() {
    let mut s = String::new();
    io::stdin().read_line(&mut s).unwrap();
    let v = s.trim().split("-").collect::<Vec<&str>>();
    match (v[0], v[1]) {
        ("joker JOKER", _) | ("JOKER joker", _) => println!("{}", v[0]),
        (_, "joker JOKER") | (_, "JOKER joker") => println!("{}", v[1]),
        _ => {
            let (l_p, r_p) = (v[0].trim().split(" ").collect::<Vec<&str>>(),v[1].trim().split(" ").collect::<Vec<&str>>(),);
            match (l_p.len(), r_p.len()) {
                (1, 1) | (2, 2) | (3, 3) | (4, 4) | (5, 5) => {
                    if compare(l_p[0], r_p[0]) {
                        println!("{}", v[0]);
                    } else {
                        println!("{}", v[1]);
                    }
                }
                (4, _) => println!("{}", v[0]),
                (_, 4) => println!("{}", v[1]),
                _ => println!("ERROR"),
            }
        }
    }
}

因为牛客的rust版本为1.44,所以有些函数没有,如果是在1.52及以后版本中,main函数里可以用split_once改写成:

fn main() {
    let mut s = String::new();
    io::stdin().read_line(&mut s).unwrap();
    if let Some((left, right)) = s.trim().split_once("-") {
        match (left, right) {
            ("joker JOKER", _) | ("JOKER joker", _) => println!("{}", left),
            (_, "joker JOKER") | (_, "JOKER joker") => println!("{}", right),
            _ => {
                let (l_p, r_p) = (left.trim().split(" ").collect::<Vec<&str>>(),right.trim().split(" ").collect::<Vec<&str>>(),);
                match (l_p.len(), r_p.len()) {
                    (1, 1) | (2, 2) | (3, 3) | (4, 4) | (5, 5) => {
                        if compare(l_p[0],r_p[0]) {
                            println!("{}", left);
                        } else {
                            println!("{}", right);
                        }
                    }
                    (4, _) => println!("{}", left),
                    (_, 4) => println!("{}", right),
                    _ => println!("ERROR"),
                }
            }
        }
    }
}

这样更顺眼一点吧。

用 Rust 刷华为机试HJ 文章被收录于专栏

用 Rust 刷 HJ100 题,只需要懂基础 Rust 语法就能看懂

全部评论

相关推荐

优秀的肱二头肌不想上班:改改简历吧,简历太简单了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务