题解 | #扑克牌大小#

扑克牌大小

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

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {
    const tokens = line.split('-');
    let arg = tokens.map(str => {
        return str.split(' ').map(it => {
            if(it === 'J') return 11;
            if(it === 'Q') return 12;
            if(it === 'K') return 13;
            if(it === 'A') return 14;
            if(it === '2') return 15;
            if(it === 'joker') return 16;
            if(it === 'JOKER') return 17;
            return +it;
        })
    });
    let res = sol(arg);
    if(res === -1){
        console.log('ERROR');
    }else{
        console.log(tokens[res]);
    }
});

function sol(arg: number[][]){
    let [p1, p2] = arg;
    // 一般情况下,牌型相同(牌的数量相同才能进行比较)
    if(p1.length === p2.length){
        return p1[0] > p2[0] ? 0 : 1;
    }
    if(p1.length === 2 && p1[0] === 16) return 0;
    if(p2.length === 2 && p2[0] === 16) return 1;
    if(p1.length === 4) return 0;
    if(p2.length === 4) return 1;
    return -1;
}

没什么算法。纯暴力。

在获取输入的时候通过'-'和' '将字符串拆分成单个牌面,然后将花牌映射成数字。通过数组长度区别牌型,数组长度相同视为相同牌型(只需要比较数组第一个元素即可区分大小,一开始想将两张牌和四张牌单独拿出来分析,因为涉及到炸弹和大小王,但是后来发现,炸弹和炸弹的比较,乃至对子和大小王的比较都只需要比较第一个元素大小即可),可以进行比较。当数组长度不相同时,只有炸弹和双王可以和其他牌型比较,如果是双王则返回双王,如果是炸弹则返回炸弹,否则返回ERROR

全部评论

相关推荐

11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务