在线OJ的小demo

Posted on 2017-09-06 10:58  风铃同学  阅读(199)  评论(0编辑  收藏  举报

牛课网OJ规则

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()

用readLine()代替read_line()

多行输入/单行输入(均适用)

V8:

// 链接:https://www.nowcoder.com/discuss/276

while(line=readline()){
    var lines = line.split(' ');
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
    print(a+b);
}
			

node.js

process.stdin.resume();
process.stdin.setEncoding("utf8");
process.stdin.on("data", function(chunk) {  // data不用管, chunk代表输入的数据

    // 单个数字:[1]
    var n = parseInt(chunk);

    // 单行多个数字:[1 2 3]
    var arr = chunk.trim().split(" ");
    var n0 = parseInt(arr[0]);
    var n1 = parseInt(arr[1]);
    // 单行多个数字:
    var n0 = parseInt((arr[0].trim().split(" "))[0]);
    var n1 = parseInt((arr[0].trim().split(" "))[1]);


    // 多行处理:
    var datas = chunk.trim().split("\n");  // 一行一行的读入数据

    // n个数字的读取:(此处假设为第3行数字(则有data[2]),因为下标从0开始)
    // [1 2 3 4 5]
    var arr = datas[2].trim().split(" ");
    var newArr = arr.map(function(item) {  // 对arr数组用map里面的函数返回一个新数组(此处主要是转换为数字)
        return parseInt(item);
    });

    // 以此读取
    for(var j = 0;j < n; j++){
        console.log(newArr[j]);
    }

});

实例:
好多鱼问题:

牛牛有一个鱼缸。鱼缸里面已经有n条鱼,每条鱼的大小为fishSize[i] (1 ≤ i ≤ n,均为正整数),牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸内存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼B大小的2倍到10倍(包括2倍大小和10倍大小),鱼A会吃掉鱼B。考虑到这个,牛牛要放入的鱼就需要保证:
1、放进去的鱼是安全的,不会被其他鱼吃掉
2、这条鱼放进去也不能吃掉其他鱼
鱼缸里面已经存在的鱼已经相处了很久,不考虑他们互相捕食。现在知道新放入鱼的大小范围minSize,maxSize,牛牛想知道有多少种大小的鱼可以放入这个鱼缸。

输入数据包括3行.
第一行为新放入鱼的尺寸范围minSize,maxSize(1 ≤ minSize,maxSize ≤ 1000),以空格分隔。
第二行为鱼缸里面已经有鱼的数量n(1 ≤ n ≤ 50)
第三行为已经有的鱼的大小fishSize[i](1 ≤ fishSize[i] ≤ 1000),以空格分隔。

输出描述:
输出有多少种大小的鱼可以放入这个鱼缸。考虑鱼的大小都是整数表示

输入:
1 12
1
1

输出:
3

process.stdin.resume();
process.stdin.setEncoding("utf8");
process.stdin.on("data", function(chunk) {
    var datas = chunk.trim().split("\n");  // 一行一行的读入数据

    var sizes = datas[0].trim().split(" ");  // 第一行的多个数据按空格划分开
    var minSize = parseInt(sizes[0]);        // 第一行的第一个数据
    var maxSize = parseInt(sizes[1]);        // 第一行的第二个数据
    
    var num = parseInt(datas[1]);  // 第二行的单个数据(鱼的数量)
    
    var size = datas[2].trim().split(" ");  // 第三行的多个数据按空格划分
    
    var fishSize=size.map(function(item){  // 对size数组用map里面的方法返回一个新数组
        return  parseInt(item);
    });
    
    var count = 0;
    for(var i = minSize;i<=maxSize;i++){
        var flag = false;
        for(var j = 0;j<num;j++){
            if((i<=fishSize[j]*10&&i>=fishSize[j]*2)||(10*i>=fishSize[j]&&2*i<=fishSize[j])){
                flag = true;
                break;
            }
        }
        if(!flag){
            count++;
        }
    }
    console.log(count);
});

输入单个数字

求质数因子:
功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )
最后一个数后面也要有空格

输入:
180

输出:
2 2 3 3 5

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    ternimal:false
});

rl.on('line', function(line){
   console.log(calc(line));
});

function calc(num) {
    var arr = [];
    while(num !== 1){
        for(var i = 2;i <= num; i++){
            if(num % i === 0){
                arr.push(i+" ");
                num = num / i;
                break;
            }
        }
    }
   return arr.join('');
}

单行文本输入

//系统函数引用
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
//////////////////////////////////////
rl.on('line', function(line){
   var tokens = line.split(' ');
    console.log(parseInt(tokens[0]) + parseInt(tokens[1]));
});