今天下午参加了网易前端笔试,选择题考了算法,数据结构还有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 );
}
}
}
}
写到这里,只能说编程部分完了,到现在选择题目没公布我也没法说,我个人最大的感触是:“编程不怕不会,就怕会了还出现一群小错误,那跟不会其实没什么区别”,希望要校招或参加其他内推的人能以此为戒,做好每道题,赢得笔试的成功!祝福大家!