华为2018春招前端开发实习生笔试题分享

我申请的是前端开发岗位,笔试题估计软件开发都是一样的,直接三道大题,一开始不熟悉牛客网的编程环境,浪费了好多时间。

牛客网编程笔试有一个好处就是可以在本地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);
原文地址:https://www.cnblogs.com/zhenguoli/p/8666688.html