字节跳动2020届秋招 Java 笔试题
笔试可以在本地IDE写,然后复制上去
第一题 ,问最晚什么时候起床
N:闹钟数 <= 100
HI 小时 Mi 分钟 0 - 24
X 去教室走几分钟 0 - 60
A 上课时间
输入案例:
3 定三个闹钟
5 0 闹钟1
6 0 闹钟2
7 0 闹钟3
59 去教室走几分钟
6 59 几点上课
输出:
6 0
我代码过了 80%,比较菜!!
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
int lasttime = 0;
//记录闹钟,时间最长的在最外面
Stack<Integer> lasttimes = new Stack<Integer>();
for (int i = 0; i < n; i++) {
String[] str = sc.nextLine().split(" ");
//这里将时间统一为分钟
lasttime+=60*Integer.parseInt(str[0]);
lasttime+=Integer.parseInt(str[1]);
lasttimes.push(lasttime);
lasttime=0;
}
//获取去学校时长
lasttime = sc.nextInt();
sc.nextLine();
//获取上课时间
String[] str = sc.nextLine().split(" ");
int inclass = 60*Integer.parseInt(str[0])+Integer.parseInt(str[1]);
//上课时间减掉来学校时间
lasttime = inclass - lasttime;
//取出闹钟比较时间长度
while(!lasttimes.isEmpty()) {
int clock = lasttimes.pop();
//如果闹钟时间小于最后时间,输出结束
if(lasttime>=clock) {
int h = (int) Math.floor(clock/60);
int m = clock%60;
System.out.println(h+" "+m);
return;
}
}
}
}
第二题 ,二进制解码
给一个二进制字符串如: 1001010
然后在给一个 K 值 : 4
根据k值进行 ^ 异或运算 K次 ,每运算一次就向左变移动一位
就是这样:
1001010000 ^
–100101000 ^
----10010100 ^
-----1001010
然后编码结果:
1110100110
题目让你根据 K 和 编码后的字符串算出原值
输入案例:
4 K
1110100110 编码后的字符串
输出:
1001010
这个当时没做出来
package ks;
public class Main {
/*
*
* 1001010000
* 0100101000
* 0010010100
* 0001001010
*
* 1110100110
*
*
*/
public static void main(String[] args) {
deCode("1110100110",4);
}
public static void deCode(String code,int k) {
long num = Long.valueOf(code, 2);
//1、长度
int length = code.length() - k+1;
//2、末尾是否为0
boolean isZero = (num%2==0);
//3、最高位为0是第几个
StringBuffer sb =new StringBuffer();
for(int i =0 ;i<length;i++) {
if(isZero&&i==length-1) {
sb.append(0);
}else {
sb.append(1);
}
}
//最大的数算出来然后进行判断
long key = Long.valueOf(sb.toString(), 2);
while(key>(1<<k)) {
if(num==code(key)) {
System.out.println(Long.toBinaryString(key));
return;
}
key-=2;
}
}
private static long code(long key) {
for (int i = 0; i < 3; i++) {
key = (key<<1)^key;
}
return key;
}
}
第三题 ,根据年龄发工资(好像是春招实习生的一道原题)
要求:没人至少发100,工龄长的人要比旁边的多100
输入
4 员工数
3 9 2 7 入职了几年
输出:
600 就是这个亚子: [ 100 , 200 , 100 , 200 ]
不知道为啥,一直 40% 过不去。。。。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = Long.parseLong(sc.nextLine());
long[] year = new long[(int) n];
String[] line = sc.nextLine().split(" ");
for (int i = 0; i < year.length; i++) {
year[i] = Long.parseLong(line[i]);
}
System.out.println(count(year));
}
public static long count(long[] year) {
//1、先左一遍
long[] money = new long[year.length];
long pre = 0;
money[0] = 100;
for (int i = 1; i < year.length; i++) {
if(money[i]==0)
money[i] = 100;
pre = year[i-1];
if(pre==year[i]) {
continue;
}
//谁年限大,谁加100
if(pre>year[i]) {
money[i-1]=money[i]+100;
}else {
money[i]=money[i-1]+100;
}
}
//在右一遍
for (int i = year.length-2; i > 0; i--) {
pre = year[i+1];
if(pre==year[i]) {
continue;
}
if(pre>year[i]) {
money[i+1]=money[i]+100;
}else {
money[i]=money[i+1]+100;
}
}
pre = 0;
for (long i : money) {
pre+=i;
}
return pre;
}
}
最后一道没看。。。。。。。。。。。。。就到这了。
版权声明:本文为qq_40398017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。