楼主网申了网易的前端开发岗,两周后发来了网易的笔试邀请并附上了链接。
整个笔试分为三部分,选择,编程和解答。楼主底子很差,这次笔试也只是试水。在发现大部分笔试题不会之后,没有解答完就提交了。(捂脸)
下面是笔试部分记录:
编程部分
1、小Q得到一个神奇的数列:1,12,123,........12345678910,1234567891011...
并且小Q对于能否被3整除这个性质很感兴趣。小Q现在希望你能帮助他计算一下从数列的第1个到第r个(包含端点)。
输入描述:
输入包括两个整数l 和 r(1 <=l <= r <= 1e9),表示要求解的区间两端。
输出描述:
输出一个整数,表示区间能被3整除的数字个数。
举例:输入:2 5 输出: 3;
表示12,123,1234,12345 中能被3 整除的数有3个。
2、牛牛以前在老师那里得到了一个正整数数对(x,y,),牛牛忘记他们具体是多少了。但是牛牛记得老师告诉过他x和y均不大于n,并且x除以y的余数大于等于k,牛牛希望你能帮他计算一共有多少个可能的数对。
输入描述:输入包括两个整数,n,k(1 <= n <= 10^5,0 <= k <= n -1)。
输出描述:对于每个测试用例,输出一个正整数表示可能的数对数量。
举例:输入:5 2 ;输出: 7。 满足条件的数对有:(2,3) ;满足条件的数对有(2,3)(2,4)(2,5)(3,4)(3,5)(4,5)(5,3);
3、牛牛去犇犇老师家补课,出门的时候面向北方,但是他现在迷路了,虽然他手里有一张地图,但是他需要知道自己面向的是哪个方向。请你帮助他。
输入描述:
每个输入包含一个测试用例。
每个输入包含一个测试用例,每个测试用例的第一行包含一个正整数,表示转的方向的次数N(N<=1000)。
接下来的一行包含一个长度为N的字符串,由L和R组成,L表示向左转,R表示向右转。
输出描述:
输出牛牛最后的面向的方向,N表示北,S表示南,E表示东,W表示西。
小Q数列问题: ------------------------------ 输入:2 5 输出:3 */ console.log("【小Q数列结果】一共有" + three(2, 5) + "个"); // 检查结果 function three(num1, num2) { let tmpFirst = ""; // 开端数字 let tmpSecond = ""; // 结束数字 let threeNumber = 0; // 整除3的数量 for (let index = 1; index <= num1; index++) { tmpFirst += index.toString(); } console.log("小Q数列-- " + "开端数字是" + tmpFirst); // 得到开端数字 for (let index = 1; index <= num2; index++) { tmpSecond += index.toString(); if (tmpSecond >= tmpFirst && tmpSecond % 3 == 0) { // 取得区间数字,并整除3 threeNumber += 1; console.log("小Q数列-- " + "数字 " + tmpSecond + " 可以整除3"); } } return threeNumber; } /* 牛牛数对问题: ------------------------------ 输入:5 2 输出:7 */ console.log("【牛牛数对结果】一共有" + pair(5, 2) + "个"); // 检查结果 function direction(n, k) { let pairNumber = 0; // 数对数量 for (let indexX = 1; indexX <= n; indexX++) { // indexX是数对左边数字 for (let indexY = 1; indexY <= n; indexY++) { // indexY是数对右边数字 if (indexX % indexY >= k) { // 计算余数是否等于k pairNumber += 1; console.log("牛牛数对-- " + "数对 (" + indexX + "," + indexY + ") 符合"); } } } return pairNumber; } /* 牛牛转向问题: ------------------------------ 输入:3 LRR 输出:E */ console.log("【牛牛转向结果】方向是" + direction(3, "LRR")); // 检查结果 function direction(number, action) { let leftNum = 0; // 左转次数 let rightNum = 0; // 右转次数 for (let index = 0; index < action.length; index++) { action[index] == "L" ? leftNum += 1 : rightNum += 1; //取得左转和右转几次 } console.log(leftNum,rightNum); let result = Math.abs(leftNum * (-1) + rightNum * 1); // 最终转的次数(左转一次和右转一次会抵消) let directionValue = 1 + result % 4; //数字4是一圈,所以取余数就是最终方向;初始方向是北,所以加1 switch (directionValue) { case 1: return "N"; // 1代表北 case 2: return "E"; // 2代表东 case 3: return "S"; // 3代表南 case 4: return "W"; // 4代表西 } }