牛客网javascript编程的输入输出

本文介绍在牛客网解决编程题时如何进行标准的输入输出操作,提供了三种方法:使用V8环境的readline方法、Node.js的readline模块及process模块,适用于在线编程和考试场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

转载地址http://blog.youkuaiyun.com/baidu_38742725/article/details/77717853?locationNum=5&fps=1

作为一名程序员,你找工作的时候一定要刷牛客网的各种算法、数据结构和编程题,那么,问题来了,牛客网的在线编程题,不是所有的都可以通过一个function解决的,尤其在线考试那些,都需要标准的输入输出,那么重点来了,怎么输入输出数据呢?(注:输入默认为字符串)
总结了下:
方法一:V8之readline
方法二:Node之readline
方法三:Node之process

V8

//求a+b
//前面四行都是一样的
//牛客网:readline
//赛码:read_line
var print = console.log;
var __readline = require('readline-sync');
__readline.setDefaultOptions({prompt: ''});
var read_line = __readline.prompt;

while(line=read_line()){
    //write your code here
    var lines = line.split(" ");
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a+b);
}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

readline方法

//单行输入
var readline=require("readline");
const r1=readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
r1.on('line',function(line){
    //write your code here
});
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

example:

//字符串最后一个单词的长度
/*计算字符串最后一个单词的长度,单词以空格隔开。
输入描述: 一行字符串,非空,长度小于5000。
输出描述: 整数N,最后一个单词的长度。
输入:hello world
输出:5 */

//字符串最后一个单词的长度
var readline=require("readline");
const r1=readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
r1.on('line',function(line){
    //找到数组中最后一个空格
    var lastSpacebar = line.lastIndexOf(" ");
    //用splice获取最后一个字符串
    var lastWord = line.slice(lastSpacebar+1);
    console.log(lastWord.length);
});
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
//多行输入
var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
const lines = [];
rl.on("line", function(line) {
    //将输入放到新建的空数组中
    lines.push(line);
    //判断,如果输入的行数等于某一值时
    if (lines.length === 2){
        //通过数组索引分别得到数组中每一行的数据,并做相应操作
        const num1 = lines[0].split(' ').sort(function(a,b) {return b-a;});
        const num2 = lines[1];        
        // console.log(num1);
        // console.log(num2);
        console.log(num1[num2-1]);
    }
});

  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
//多行输入
const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
var inputArr = [];
rl.on('line', function (input) {
    //将输入放到新建的空数组中
    inputArr.push(input);
    //将输入的数据转换为数组
    var inputs = input.split(" ");
    //得到第一行的那个数(行数)
    var nLine = +inputArr[0];
    //判断,如果第一行输入的数字(行数)等于输入的总行数
    if (inputArr.length == (nLine + 1)) {
        //截取第一行到最后一行数据(即:除了第一个数据行数之外的其他数据)
        var arr = inputArr.slice(1);
        //这里打印的arr不包括第一行数字(行数)
        console.log(arr);
        //这里打印的inputArr包括第一行数字(行数)
        // console.log(inputArr);       
        inputArr = [];
        // console.log(inputArr);
    }
});
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

process方法

process.stdin.resume();
process.stdin.setEncoding("ascii")

var input=""

process.stdin.on("data",function(data){
    //将输入的数据赋给input
   input+=data;
   var chunk= data.slice(0,-2);
        if(chunk===''){
            process.stdin.emit('end');
        }
})

process.stdin.on('end',function(){
    //将输入的多行数据转换为数组
    var arr=input.split("\n");
    //去掉数组的第一个数据
    arr.shift();
    var arrb=[]
    //循环遍历数组,将去重后的数据保存到新的数组arrb中
    for(var i=0;i<arr.length;i++){
        if(arrb.indexOf(arr[i])==-1){
            arrb.push(arr[i])
        }
    }
    //这里调用了API,排序,将得到的数组arrb排序并且转换为字符串
    var str=arrb.sort(function(a,b){return a-b;}).join('\n');
    console.log(str);

})
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

程序媛小白一枚,有错误的地方,还望大佬指正~~O(∩_∩)O

### JavaScript牛客网平台上的输入输出 对于JavaScript,在线编程环境中通常会遇到不同于常规浏览器或Node.js环境下的输入输出方式。为了适应这种特定的评测系统,开发者需采用专门的方法来获取输入并展示结果。 #### 获取输入 在基于V8引擎的环境下,可以利用`readline()`方法逐行读取输入直到结束标志出现为止[^1]。此过程可以通过循环结构不断调用`readline()`直至满足终止条件,例如检测到特定格式的数据作为文件结尾指示或是其他形式的停止信号。每读入一行字符串之后,可以根据实际需求对其进行解析处理,比如分割成数组元素以便后续运算: ```javascript let inputs = []; while (line = readline()) { let pair = line.split(' '); // 假设每一行为两个数值,则分别转换为整数类型存入临时变量a,b let a = parseInt(pair[0]); let b = parseInt(pair[1]); if (a === 0 && b === 0) break; // 将有效数据加入全局列表中等待进一步加工 inputs.push([a, b]); } ``` 上述代码片段展示了如何连续接收多组由空格分隔开来的两数组合,并将其保存下来供下一步骤使用。 #### 处理与输出 一旦收集齐所需的所有输入项后,就可以定义相应的逻辑函数来进行必要的计算工作了。这里以简单的加法为例说明怎样遍历之前积累起来的数据集并对各成员实施累加操作,最后通过内置命令打印最终答案给评判服务器知晓: ```javascript function addPairs(inputList){ inputList.forEach(([numA,numB],index)=>{ console.log(numA + numB); }); } addPairs(inputs); ``` 值得注意的是,这里的输出应当严格按照题目规定的格式要求完成;任何额外字符(包括但不限于多余的空白符)都可能导致评分失败。因此务必确保仅发送预期中的响应内容至标准输出流。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值