题解 | #扑克牌大小#
扑克牌大小
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 语法就能看懂