牛客网OJ常见输入输出JS篇

1,052 阅读2分钟

1.png

相信大家都有接触过牛客网的算法题,和力扣网不同的是,牛客网上需要自己处理输入输出,在刷算法题前,先要对输入输出的11道题目足够清晰,才能开始埋头开干。前前后后已经刷了3遍,虽然每次都能解决掉,但过一段时间就忘了,“好记性不如烂笔头”,记录一下总结的技巧,正好和大家也分享一下。以下示例我都以JS为例,相对来说网上JS的帖子比较少。

题目链接:牛客网OJ常见输入输出

image.png  

一、正整数求和

1.输入只有多行正整数,无行数、每行正整数个数、结束条件(对应题A、G、K)

题A参考代码:

while(line = readline()) {
    var lines = line.split(" ");
    var sum = 0
    for(var i = 0; i < lines.length; i++) {
        sum += parseInt(lines[i])
    }
    print(sum)
}

题G参考代码:

while(line = readline()) {
    var sum = 0;
    var lines = line.split(" ");
    for(var i = 0; i < lines.length; i++) {
        sum += parseInt(lines[i]);
    }
    print(sum)
}

题K参考代码:

while(line = readline()) {
    var lines = line.split(" ");
    var sum = 0;
    for(var i = 0; i < lines.length; i++) {
        sum += parseInt(lines[i]);
    }
    print(sum)
}

2.输入只有多行正整数、结束条件,无行数、每行正整数个数(题C)

题C参考代码:

while(line = readline()) {
    var res = 0;
    var lines = line.split(" ");
    for(var j = 0; j < lines.length; j++) {
        var temp = parseInt(lines[j]);
        res += temp;
    }
    if(res === 0) break;
    print(res);
}

3.先输入行数,再输入多行正整数,无每行正整数个数、结束条件(题B)

题B参考代码:

var num = parseInt(readline());


for(var i = 0; i < num; i++) {
    var sum = 0;
    var lines = readline().split(" ");
    for(var j = 0; j < lines.length; j++) {
        sum += parseInt(lines[j]);
    }
    print(sum);
}

4.输入有每行正整数个数、多行正整数、结束条件,无行数(题D)

题D参考代码:

while(line = readline()) {
    var lines = line.split(" ");
    var num = parseInt(lines[0]);
    var sum = 0;
    for(var i = 1; i <= num; i++) {
        sum += parseInt(lines[i]);
    }
    if(sum === 0) break;
    print(sum);
}

5.先输入行数,再输入每行正整数个数和多行正整数,无结束条件(题E)

题E参考代码:

while(line = readline()) {
    var lines = line.split(" ");
    var num = parseInt(lines[0]);
    var sum = 0;
    for(var i = 1; i <= num; i++) {
        sum += parseInt(lines[i]);
    }
    if(sum === 0) break;
    print(sum);
}

6.输入有每行正整数个数、多行正整数,无行数、结束条件(题F)

题F参考代码:

while(line = readline()) {
    var sum = 0;
    var lines = line.split(" ");
    var num = lines[0];
    for(var j = 1; j < lines.length; j++) {
        sum += parseInt(lines[j]);
    }
    print(sum);
}

解释:readline()是读取每行输入的函数,当第一次执行读取到第一行,第二次执行读取到第二行,依次类推

做题技巧:

  1. 多行输入,第一行为行数,先获取行数:
var len = parseInt(readline())

然后用 for 循环,循环次数为 len

若无行数即行数不确定,则用 while(line = readline())

  1. 求和正整数行中,如果第一个数为该行求和正整数个数,需要先获取回来
var lines = line.split(" ");
var num = parseInt(lines[0]);

然后 for 循环,循环次数为 num(从 1 开始循环)

若无 num,则循环次数为 lines.length (从 0 开始循环)

  1. 如果有结束条件,则需要判断当行求和结果是否为 0,若为 0 则跳出循环(break)

二、字符串排序

1.先输入正整数个数,再输入一行字符,共两行(题H)

分析:因为排序字符只有一行,故不需要循环。按照技巧2,先获取排序元素个数(此时目的仅是为了先执行一次 readline(),然后再执行一次 readline() 就能获得排序元素)

题H参考代码:

var num = readline();
var lines = readline().split(" ");  //split,sort 返回数组,join 返回字符串
var res = lines.sort().join(" ");
print(res)

2.输入只有每行字符(空格间隔)(题I)

题I参考代码:

while(line = readline()) {
    var lines = line.split(" ").sort().join(" ");
    print(lines)
}

3.输入只有每行字符(逗号间隔)(题J)

题J参考代码:

while(line = readline()) {
    var lines = line.trimRight().split(",").sort();
    print(lines);
}