京东笔试

有没有今天京东笔试的家人可以帮我看下小红玩人兽游戏那题我的解法为什么数组越界?通过测试用例,但是提交代码报错数组越界,排查得出是这句let j=parseInt(tokens[1])-1里j的问题,j>n

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    let count=0,res='',n=0,m=0,roles=[]
    
    while(line = await readline()){
        let tokens = line.split(' ');
        if(count===0) {
            n = parseInt(tokens[0]);
            m = parseInt(tokens[1]);
            for(let i=0;i<n;i++) {
                roles[i]={
                    role:'human',
                    energy:0
                }
            }
        } else if(count<5) {
            roles[count-1].role=tokens[0]
            roles[count-1].energy=parseInt(tokens[1])
        } else {
            //console.log(tokens)
            let i=parseInt(tokens[0])-1
            let j=parseInt(tokens[1])-1
            //console.log(i,j,typeof(i),typeof(j))
            let choice1=tokens[2],choice2=tokens[3]
            //if(i>=n||j>=n) break
            if(!(choice1==='N'&&choice2==='N')) {
                if(roles[i].role!==roles[j].role) {
                    if((roles[i].role==='human'&&choice1==='Y')||(roles[j].role==='human'&&choice2==='Y')) {
                        //一定打
                        if(roles[i].energy>roles[j].energy) {
                            roles[j].energy=0 //标记死亡
                        } else if(roles[i].energy<roles[j].energy) {
                            roles[i].energy=0 //标记死亡
                        } else if(roles[i].energy===roles[j].energy) {
                            roles[i].energy=0 //标记死亡
                            roles[j].energy=0 //标记死亡
                        }
                    } else {
                        if(roles[i].role==='human'&&roles[i].energy>roles[j].energy) {
                            roles[j].energy=0
                        } else if(roles[j].role==='human'&&roles[j].energy>roles[i].energy) {
                            roles[i].energy=0
                        }
                    }
                }
            } 
        }
        count++
        //console.log(a + b);
    }
    for(let i=0;i<n;i++) {
        if(roles[i].energy===0) {
            res+='N'
        } else {
            res+='Y'
        }
    }
    console.log(res)
}()

全部评论
java是io有问题,不知道其他语言有没有,那个只是提示说可能有数组越界,但是报的错误是scanner触发的异常,在n行数据那里读到了m行才出现的Y,离谱
1 回复 分享
发布于 2023-10-07 17:11 广东
第三题回溯只拿了15。。是需要剪枝啥的吗?
1 回复 分享
发布于 2023-10-07 17:04 江苏
我觉得是测试数据错了吧?少了一行,我最后一行没有数直接break才过
点赞 回复 分享
发布于 2023-10-07 17:31 北京
各位佬所以这类模拟题的关键是什么呢?设计比较好的判断条件和类似剪枝的思想吗?感觉没啥问题,但是怎么搞都超时,没过30。
点赞 回复 分享
发布于 2023-10-07 17:26 美国
第二题为啥0通过,想了半天没想明白... 不就是简单的模拟吗...
点赞 回复 分享
发布于 2023-10-07 17:13 北京
我是读匹配两组数据的 数组那里越界 然后只A了70
点赞 回复 分享
发布于 2023-10-07 17:13 广东

相关推荐

不愿透露姓名的神秘牛友
03-20 12:02
已编辑
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务