网易2018春招笔试题解

第一题:

参考代码
let dir=["N","E","S","W"];
let turn="LRR";
let k=0;
for(let i=0;i<turn.length;i++){
    if(turn[i]=="L"){
        k+=3;
    }else{
        k++;
    }
}
k=k%4;
console.log(dir[k]);


第二题:

题目分析,暴力破解会超时,所以需要点数学,我们来找找规律。
        对于   n=12345,k=2    
        模1   得000(00)    大于k的有0个    
        模2   得1010)       大于k的有0个    
        模3   得12012      大于k的有2个    
        模4   得12301      大于k的有2个    
        模5   得12340      大于k的有3个    
看不出来?加下括号
        模1   得(0)(0)(0)(0)(0)     大于k的有0个    
        模2   得(10)(10)1            大于k的有0个    
        模3   得(120)12              大于k的有2个    
        模4   得(1230)1              大于k的有2个    
        模5   得(12340)              大于k的有3个    
也就是
        模i    为(0...i-1)(0....i-1)(0...n%i)        每个(0...i-1)有i-k个数符合要求,有n/i个(0...i-1),,而最后的那个尾巴只有n%i-k+1个数符合要求
        注意:i要从k+1算起,当i<k时,i-k<0了,会减少总数,i=k时,i-k=0没必要算进去总数
嗯,可以动手写代码了
参考代码:
let n=5,k=2;
let count=0;
if(k==0){
    count=n*n;
}else{
    for(let i=k+1;i<=n;i++){
        count+=~~(n/i)*(i-k);
        if(n%i>=k){
            count+=n%i-k+1;
        }
    }
}
console.log(count);


第三题:

题目分析:
这题用O(n)都有可能会超时,只能看规律了,但是规律也是有其数学性的,而这题的之所以有规律就是相邻的数字相差为1.
当k mod 3=0时,能整除3,当k mod 3=2时也能整除3,因为   k的前一个数(k-1)mod3=1,两个余数想加是3,所以k+(k-1)是可以整除3的
所以这是一道数学题。。。。

参考代码
let l=2,r=5;
let count=0;
for(let k=l;k<=r;k++){
    if(k%3==0||k%3==2){
        count++;
    }
}
console.log(count);
#春招##前端#
全部评论
第一个好像不一样啊。
点赞
送花
回复
分享
发布于 2018-03-27 21:46
第三个循环过不了,会超时,注意到每连续三个一组的就有两个满足要求
点赞
送花
回复
分享
发布于 2018-03-27 21:49
滴滴
校招火热招聘中
官网直投
朋友,第一题真的写的好简便巧妙啊,如果是任意字符串怎么接收啊
点赞
送花
回复
分享
发布于 2018-03-27 22:21
给大佬跪了,第三题找规律写了一大堆数数就是没想到mod 3=2的规律
点赞
送花
回复
分享
发布于 2018-03-27 23:26
这个网易是网易游戏的么?。???
点赞
送花
回复
分享
发布于 2018-03-27 23:35
第二题的java版本 import java.util.Scanner; public class Main {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int n = in.nextInt();         int k = in.nextInt();         System.out.println(core(n, k));     }     public static int core(int n, int k) {         int count = 0;         if(k == 0){             return n*n;         }         for (int y = k + 1; y <= n; y++) {             int i = n/y;             count += i*(y-k);             if(n%y >=k){                 count += n%y -k +1;             }         }         return count;     } }
点赞
送花
回复
分享
发布于 2018-03-29 12:07

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务