编程题总结:
1、首先要理清题意,理清思路,给出的条件都是有用的,没用到肯定有问题;
2、最好先要总结规律,看一下可能出现的情况有哪些特例;
3、要仔细是否有语法错误;!!!!!!
4、分清功能点,一点一点的验证。
1、牛客网上边的编程题的输入输出: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);});
如下实例:
//假如输入是如下的151 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(" ");可以输出。
如果输出为一次输入多行输出,就需要循环调用print(); 来输出。
不知道理解的对不对,反正现在很多题根本就没法用js来操作,或者有的时候可能是内部环境有一些方法不允许使用,然后,就会导致错误。
2.1、赛码网单行输入:(程序执行一次,读取一行)
var line;while(line = read_line()){ line = line.split(' '); print(parseInt(line[0]) + parseInt(line[1]));}
2.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();
牛客网的答案实例:(要仔细分析,很多时候都是输入输出的问题)
1、水仙花的问题
问题描述:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如: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;}
2、输入第一行表示后边的行数,接着是具体的数值(特点,首行表示输入的行数,接着几行是结果,输入的行数不确定)
题目描述:
有一楼梯共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
3、多行输出,一次输入,多行输出。
题目:研究生考试
题目描述:
我相信参加本次在线招聘考试的有不少研究生同学。我们知道,就计算机相关专业来说,考研有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
3、
1、不允许在本地编程;
2、请认真阅读题目要求,严格按样例数据的格式输入和输出;
3、除了提交代码,你还自己输入测试数据,自己分析结果。系统不会告诉你正确还是错误。也就是说,可能自己测试的是正确的,但是真正的测试却是错误的。即使运行成功也要认真检查,是否考虑到了每种情况,是否有多余或缺少的字符(注意空格和换行)。
使用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();来进行;
多组输入没讲,也就是说不会给多组输入,每次也就是一组输入。