华为2018春招前端开发实习生笔试题分享
2018-03-28 22:05 溪涵 阅读(2434) 评论(0) 编辑 收藏 举报我申请的是前端开发岗位,笔试题估计软件开发都是一样的,直接三道大题,一开始不熟悉牛客网的编程环境,浪费了好多时间。
牛客网编程笔试有一个好处就是可以在本地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);