关于牛客、赛码、测评等考试平台的前端输入输出的整理

 

编程题总结:

一、首先要理清题意,理清思路,给出的条件都是有用的,没用到确定有问题;javascript

二、最好先要总结规律,看一下可能出现的状况有哪些特例;java

三、要仔细是否有语法错误;!!!!!!node

四、分清功能点,一点一点的验证。 编程

 

一、牛客网上边的编程题的输入输出:node V0.12.12 环境下

多行输入: 数组

//多行的输入
process.stdin.resume();
process.stdin.setEncoding('ascii');
var input = "";
var input_array = "";
process.stdin.on('data', function(data){
    input += data;//这里的data保存的是以换行\n全部的加起来的一个字符串
});
//以下表示每一个用例有三行的时候的结果
//注意:假若有数组的时候,数组内保存的是字符串形式,须要添加 + 来转化成真正的数字。

//以回车来分割 //到这个地方会把每行都当成一个字符串保存到一个数组中去,数组的最后一项是一个空字符"",

//因此按照题目给定,依次把数组的元素赋值给变量就好了 //这里就要观察所给用例的特征了,依次来进行输出
process.stdin.on('end', function (){ input_array = input.split("\n"); //以回车来分割的 var line_1 = input_array[0]; var line_2 = input_array[1]; var line_3= input_array[2]; console.log(line_1); });

以下实例:网络

//假如输入是以下的
15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

//那么读取进来的时候的input_array以下
[ '15', '1 2 3 4 5 6 7 8 9 10 11 12 13 14 15', '' ]
一个包含三个字符串的数组

//typeof测试为string

//切割中间的字符串获得一个数组,可是数组的元素类型依然为字符串

单行的状况就只取input_array[0];

以下便于作题的时候抄上去:函数

process.stdin.resume();
process.stdin.setEncoding('ascii');
var input = "";
var input_array = "";
process.stdin.on('data', function(data){
    input += data;
});
process.stdin.on('end', function (){
    input_array = input.split("\n");
    var line_1 = input_array[0];
    var line_2 = input_array[1];
    var line_3= input_array[2];    
    //这里分析出填入的参数

    console.log(func(p1,p2,,,,));//输出结果
});

//这里是处理函数
function func(p1,p2,,,,){

}

 单行输入的另外一种方法:

//参考判题系统,可是只能读取单行的输入
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]));
});

对于赛码网可能真的不适合用js来编写,那别人经过的代码贴到输入里面,结果是不经过,不懂为什么,还有就是,这些题能不能用js来作都是个问题。连着作了四五场考试了,本地测试的代码都能经过,线上就是不经过,也不知道时输入输出的问题,仍是真的是我编写的程序的问题。测试

个人理解是这个网站的js,每次调用一次read_line()函数,就会读取同样,当行数已知的时候直接调用相同的次数就能够得到字符串形式的参数。网站

输出使用print() 函数,每次输出一行,自动换行,若是结果是一行由空格隔开的状况就把结果放到一个数组中,而后调用arr.join(" ");能够输出。ui

若是输出为一次输入多行输出,就须要循环调用print(); 来输出。

不知道理解的对不对,反正如今不少题根本就无法用js来操做,或者有的时候多是内部环境有一些方法不容许使用,而后,就会致使错误。

2.一、赛码网单行输入:(程序执行一次,读取一行)

var line;
while(line = read_line()){
    line = line.split(' ');
    print(parseInt(line[0]) + parseInt(line[1]));
} 

2.二、赛码网的两行输入:(函数执行一次,读取两行),使用+或者parseInt()能够将读取的字符串型转为数值型。

var first_line = read_line();//字符串型的,若是是数字须要转换
var arr = [];
var line;
while(line= read_line()){
  arr.push(line);//把后边的每一行都看成一个字符串,做为数组的元素填入数组中,这样就能够操做了
}
print(fn());

 同理三行的时候,判断与以前行的特征的不一样,判断出来保存到一个值当中。

 直接这样也是能够的:

var str1 =read_line().trim();
var str2 =read_line().trim(); 

牛客网的答案实例:(要仔细分析,不少时候都是输入输出的问题)

一、水仙花的问题

问题描述:“水仙花数”是指一个三位数,它的各位数字的立方和等于其自己,好比:153=1^3+5^3+3^3。如今要求输出全部在m和n范围内的水仙花数。

输入:(特色:单行,两个值)输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。输入:100 120

输出:对于每一个测试实例,要求输出全部在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,而且小于等于n,若是有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
若是给定的范围内不存在水仙花数,则输出no; 每一个测试实例的输出占一行。输出:no

程序代码:

//水仙花的题目
var sc;
while(sc = read_line()){
    var arr = sc.split(' ');//单行输入,调用依次read_line()函数
    n=parseInt(arr[1]);
    m=parseInt(arr[0]);
    //输出
    print(fn(n,m));
}
function fn(n,m){
    var res = "";    
    for (i=n;i<=m;i++){
        var l = Math.floor(i/100);
        var k = Math.floor((i%100)/10);
        var j = i%10;
        var num = Math.pow(l,3) + Math.pow(k,3) + Math.pow(j,3);
        if(i == num){
            res = res + i+" ";
        }
    }
    return res == "" ? "no":res;
}

二、输入第一行表示后边的行数,接着是具体的数值(特色,首行表示输入的行数,接着几行是结果,输入的行数不肯定)

题目描述:

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?

注:规定从一级到一级有0种走法。

输入:输入数据首先包含一个整数n(1<=n<=100),表示测试实例的个数,而后是n行数据,每行包含一个整数m,(1<=m<=40), 表示楼梯的级数。

以下样例:

2

2

3

输出:对于每一个测试实例,请输出不一样走法的数量。

输出结果:

1

2

var line;
var data = [];//结果数组中,长度是未知的,不肯定的,因此不能用变量来直接的保存。
while(line = read_line()){
    data.push(line);//这里是关键
}
for(var i=1; i<data.length; i++){//依次对输入求值
    print(stair(data[i]-1));//可使用两次输出函数来输出,其实也能够直接在两个结果中间添加“\n”来换行。
}
//处理函数
function stair(num){
    if(num === 0){
        return 0;
    }if(num === 1){
        return 1;
    }if(num === 2){
        return 2;
    }
    return stair(num-1)+stair(num-2);
};

三、多行输出,一次输入,多行输出。

题目:研究生考试

题目描述: 

我相信参加本次在线招聘考试的有很多研究生同窗。咱们知道,就计算机相关专业来讲,考研有4门科目,分别是政治(满分100分),英语(满分100分),数学(满分150分)和专业课(满分150分)。

某校计算机专业今年录取研究生的要求是:政治、英语每门课成绩不低于60分,数学和专业课不低于90分,总成绩不低于310分。而且规定:在知足单科以及总成绩最低要求的基础上,350分以上(含350分)为公费(Gongfei),310分~349分为自费(Zifei)。

请编程判断考生的录取状况。

这样写是对的:

var n = parseInt(read_line().trim());
var i =0,line,p,e,m,o;
for(;i<n;i++){
	line = read_line().split(' ');
  	p = parseInt(line[0]);
  	e = parseInt(line[1]);
  	m = parseInt(line[2]);
  	o = parseInt(line[3]);
	mmm(p,e,m,o)
}

function mmm(a,b,c,d) {
	var s = a+b+c+d;
  if(a<60 || b<60 || c< 90 || d < 90 || s < 310){
    	print('Fail');
    } else if(s<350) {
    	print('Zifei');
    } else{
        	print('Gongfei');
    }
} 

三、测评网站的编程注意事项:

一、不容许在本地编程;

二、请认真阅读题目要求,严格按样例数据的格式输入和输出;

三、除了提交代码,你还本身输入测试数据,本身分析结果。系统不会告诉你正确仍是错误。也就是说,可能本身测试的是正确的,可是真正的测试倒是错误的。即便运行成功也要认真检查,是否考虑到了每种状况,是否有多余或缺乏的字符(注意空格和换行)。

使用js语言来编程:

使用Google V8 Engine解释运行。禁止使用图形、文件、网络、系统相关的操做。请勿修改主函数名main()。

如何输入:调试代码时你须要手动输入测试数据,请严格按照题目样例格式输入

  输入数据时,字符串数据先后需加英文引号输入多个数据时请用英文逗号隔开,而且与main()中参数个数相同。

如何输出:请使用console.log()输出

//输入一组数据并输出 
function main(a1,a2,a3,a4,a5,a6){
    console.log(a1,a2,a3,a4,a5,a6);
}

反正就是全部的输入全是这个函数的参数,在函数内部输出使用console.log();来输出。输出多行应该使用多个console.log();来进行;

多组输入没讲,也就是说不会给多组输入,每次也就是一组输入。

相关文章
相关标签/搜索