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

今天下午参加了网易前端笔试,选择题考了算法,数据结构还有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= count)
                {
                    count = temp;
                }
                } else {
                    temp = 0;
                }
            }
            //修改部分
            //判断n个1组成的串不是01串
            boolean flat=true;
        for(int k=0;k=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网易前端笔试感想(编程部分))