8.12网易前端笔试感想(编程部分)

作者: 大侠一点红 | 来源:发表于2017-08-12 22:44 被阅读0次

    今天下午参加了网易前端笔试,选择题考了算法,数据结构还有JS有关知识,题目难度相对基础,算是很幸运的,编程题三道,题目好理解,也好写,就是想全部通过测试用例有点麻烦,编译器不给没有通过的测试用例,搞得自己也只是干瞪眼的看代码。但最关键是好好审题,因为就在刚才,我把下午的题进行修改,全部通过测试用例(想哭!!!!)就考试而言,过了一个,剩下一个90%,一个70%,心有不甘,但相比之前参加过的编程情况已经好很多了,下面就把这份试题的编程部分说一下:

    (题目有点长,我全部截下来,目的是认真审题,所以希望读者静下心慢慢读)

    1.小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)

    例如: s = "ABAB",那么小易有六种排列的结果:
    "AABB","ABAB","ABBA","BAAB","BABA","BBAA"
    其中只有"AABB"和"BBAA"满足最多只有一对不同颜色的相邻砖块。

    输入描述:
    输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s中的每一个字符都为一个大写字母(A到Z)。
    输出描述:
    输出一个整数,表示小易可以有多少种方式。
    示例1
    输入:ABAB
    输出:2

    这道题第一遍当时很开心,把输入的字符串排个序,看它有多少种字符,然后一阶乘,一波流,So easy(莫名自信),然后就这么做了,做了之后通过率70%,以为是最后阶乘值太大就用了BigInteger,结果还是70%,一看时间不够了就next了。
    晚上好好读了一遍题,发现了问题 “最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的” 就是说如果字符不同数>2 计数直接为0而且直接输出,所以代码改了一下就通过了,代码如下:

    package 网易20178月笔试;
    
    import java.math.*;
    import java.util.*;
    /**
     * Created by JackHui on 2017/8/12.
     */
    public class no1 {
        public static void main(String[] args)
        {
            Scanner s=new Scanner(System.in);
            while(s.hasNext()) {
                int count = 1;
                int num = 1;
                String x = s.nextLine();
                char[] n = x.toCharArray();
                Arrays.sort( n );
                char temp = n[0];
                for (int i = 1; i < n.length; i++) {
                    if (n[i] != temp) {
                        temp = n[i];
                        count++;
                    }
                    if (count > 2) {
                        count = 0;
                        break;
                    }
                    continue;
                }
                if (count == 0) {
                    System.out.println( count );
                } else {
                    BigInteger result = new BigInteger( "1" );
                    for (int i = 1; i <= count; i++) {
                        BigInteger num1 = new BigInteger( String.valueOf( i ) );
                        result = result.multiply( num1 );
                    }
                    System.out.println( result );
                }
            }
        }
    }
    
    

    2.如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: "1","10101","0101010"都是交错01串。

    小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。

    输入描述:输入包括字符串s,s的长度length(1 ≤ length ≤ 50),字符串中只包含'0'和'1'

    输出描述:
    输出一个整数,表示最长的满足要求的子串长度。

    输入
    111101111
    输出
    3

    这个题也是很自信,数据放入字符串数组,一个一个比,设置两个变量,一个临时变量存即时最大值,一个存最后最大值,如果临时值大于最大值,就同步过去,如果01串断了,临时值清0,按这个思路做了,又是90%。这次我查了20分种,半天找不到就next了,到了晚上,发现又是审题没看,题目说“1”也是01串,而后通过多次提交看了测试用例发现,系统设定由多个1组成的01串也是01串(也就是说开头为1也视为01串格式)。(-_- ! 我还能说什么),上代码吧:

    package 网易20178月笔试;
    
    import java.util.Scanner;
    
    /**
     * Created by JackHui on 2017/8/12.
     */
    public class no2 {
        public static void main(String[] args)
        {
            int temp=0;
            int count=0;
            Scanner s=new Scanner( System.in );
            String x=s.nextLine();
            if(x.length()>50||x.length()<1)
            {
                return;
            }
            char[] num = x.toCharArray();
            for(int i=1;i<num.length;i++)
            {
                if (num[i] != num[i - 1]) {
                    temp += 1;
                    if (temp >= count)
                    {
                        count = temp;
                    }
                    } else {
                        temp = 0;
                    }
                }
                //修改部分
                //判断n个1组成的串不是01串
                boolean flat=true;
            for(int k=0;k<num.length;k++)
            {
                if(num[k]==0)
                {
                    flat=false;
                }
                else continue;
            }
            if(count>=1)
            {
                System.out.println(count+1);
            }
            else if(flat)
            {
                System.out.println(count+1);
            }
            else {
                System.out.println(count);
            }
        }
    }
    
    

    3.小易为了向他的父母表现他已经长大独立了,他决定搬出去自己居住一段时间。一个人生活增加了许多花费: 小易每天必须吃一个水果并且需要每天支付x元的房屋租金。当前小易手中已经有f个水果和d元钱,小易也能去商店购买一些水果,商店每个水果售卖p元。小易为了表现他独立生活的能力,希望能独立生活的时间越长越好,小易希望你来帮他计算一下他最多能独立生活多少天。

    输入描述:
    输入包括一行,四个整数x, f, d, p(1 ≤ x,f,d,p ≤ 2 * 10^9),以空格分割

    输出描述:
    输出一个整数, 表示小易最多能独立生活多少天。

    示例
    输入:
    3 5 100 10
    输出
    11

    做对的一道题,很简单,我用的分类讨论然后判断,先判断钱够不够交租金,然后判断有没有苹果,就这样一步步判断完。其实可以将苹果化为金钱,然后相当于每天固定交苹果钱和租金钱,就结束了!(经过与"@Minot_迷诺"读者的讨论,发现如果有苹果没钱就是不成立的,所以还是要先判断钱先花完还是苹果先吃完)最后是我的代码:

    package 网易20178月笔试;
    
    import java.util.Scanner;
    
    /**
     * Created by JackHui on 2017/8/12.
     */
    public class no3 {
        public static void main(String[] args) {
            Scanner s = new Scanner( System.in );
            int a = s.nextInt();  //租金
            int b = s.nextInt();  //水果数
            int c = s.nextInt();  //钱数
            int d = s.nextInt();  //水果单价
            int date = 0;
            int temp1 = c / a;
            if (c < a) {
                System.out.println( date );
            } else {
                if (b > 0) {
                    if (b >= temp1) {
                        System.out.println( temp1 );
                    }
                    if (b < temp1) {
                        int temp2 = ((c - (b * a)) / (a + d));
                        System.out.println( b + temp2 );
                    }
                } else
                {
                    int temp3=(c/(a+d));
                    System.out.println( temp3 );
                }
    
            }
        }
    }
    
    

    写到这里,只能说编程部分完了,到现在选择题目没公布我也没法说,我个人最大的感触是:“编程不怕不会,就怕会了还出现一群小错误,那跟不会其实没什么区别”,希望要校招或参加其他内推的人能以此为戒,做好每道题,赢得笔试的成功!祝福大家!

    相关文章

      网友评论

        本文标题:8.12网易前端笔试感想(编程部分)

        本文链接:https://www.haomeiwen.com/subject/lbajrxtx.html