我申请的是前端开发岗位,笔试题估计软件开发都是一样的,直接三道大题,一开始不熟悉牛客网的编程环境,浪费了好多时间。
牛客网编程笔试有一个好处就是可以在本地ide上面编写运行之后再copy到答题环境中,这样可以方便我进行调试,更直观地找到代码中一些小问题并快速修改。
接下来就是干货分享啦!我笔试的时候做出了两道题,第三题时间不够,没有做出来。不知道有没有面试机会额。
牛客网编程环境介绍
我选的是js v8
代码示例有两个
1.
// 求a+b的和
while(line=readline()){
var lines = line.split(" ");
var a = parseInt(lines[0]);
var b = parseInt(lines[1]);
print(a+b);
}
2.
// 输出一个整数,表示n阶方阵的和
// 输入
// 3
// 1 2 3
// 2 1 3
// 3 2 1
var n = parseInt(readline());
var ans = 0;
for(var i = 0;i < n; i++){
lines = readline().split(" ")
for(var j = 0;j < lines.length; j++){
ans += parseInt(lines[j]);
}
}
print(ans);
笔试题:
第一题和第二题的代码实现是在牛客网环境中运行的,如果自己调试的话可以适当修改一下,不影响思路哈。
1.题目很长,可以简化如下:
一个整数数组,数组中每个值的范围为0-21,求数组中相邻四个数之和最大,返回该相邻四个数中的第一个数的索引
// 1.将输入存为一个数组;
//2.找数组中相邻四个数之和最大,可以考虑遍历求和,将和放在一个新的数组中,其中对象的索引为接收能量窗的索引,值为四个数之和;
//3.遍历数组,找出最大的值,并输出对应的索引
var arr = [];
var newarr = [];
for(var i = 0;i < 21; i++){
arr[i] = parseInt(readline());
}
for(var j = 0;j < arr.length-3; j++){
var h = 0;
newarr[j] = 0;
while(h<4){
newarr[j] += parseInt(arr[j+h]);
h++;
}
}
var max = Math.max.apply(null,newarr);
var index = newarr.indexOf(max);
print(index);
2.找标准键盘和自然键盘的对应关系,输入是自然键盘,输出是对应的标准键盘的字符,注意大写字母对应输出大写字母,而小写字母对应输出小写字母
标准键盘:QWERTYUIOPASDFGHJKLZXCVBNM
自然键盘:ABCDEFGHIJKLMNOPQRSTUVWXYZ
输入
H kz k xif.
输出
I am a boy.
//1.在自然键盘中找到对应字符的索引(用Indexof),再根据索引在标准键盘中找到对应字符;
//2.要考虑大小写问题,可用正则表达式判断字母大小写
var bstr="QWERTYUIOPASDFGHJKLZXCVBNM";
var zstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var barr=bstr.split("");
var zarr=zstr.split("");
var newarr=[];
while(line=readline()){
var arr = line.split("");
}
for(var j = 0;j < arr.length; j++){
var flag = true; //是否小写
if(/^[a-z]+$/.test(arr[j])){
arr[j]=arr[j].toUpperCase();
flag = false;
}
var index = zarr.indexOf(arr[j]);
if(index == -1){
newarr[j] = arr[j];
}else{
if(!flag){
newarr[j] = bstr[index].toLowerCase();
}else{
newarr[j] = bstr[index];
}
}
}
var result = newarr.join("");
print(result);
3.
求一个整形数组中最大连续字数组的和
输入
2, -3, 4, 11, -5, 8, 3, -6
输出
21
输入是一组数字,数字本身可以是正数,也可以是负数。输出是这个数组的子数组中最大的求和数。如例子中满足该条件的额子数组是:4, 11, -5, 8, 3 求和后的值是21
// 1.要加和arr.length轮;
// 2.声明一个新数组,在每一轮加和中依次保存arr[i],arr[i]+arr[i+1],.....,arr[i]+...+arr[arr.length-1]
// 3.找到新数组中最大的数值,输出该值即可
// while(line=readline()){
// var arr = line.split(", ");
// }
var arr=[2,-3,4,11,-5,8,3,-6]
var newarr=[];
var a=0;
for(var i = 0;i < arr.length; i++){
// arr[i] = parseInt(arr[i]);
var count = arr.length;
while(count > i){
newarr[a] = 0;
for(var j = i;j < count; j++){
newarr[a] += arr[j];
}
count--;
a++;
}
}
var max = Math.max.apply(null,newarr);
// print(max);
console.log(max);
来源:oschina
链接:https://my.oschina.net/u/4363215/blog/4029253