[整理] 字节跳动 后台研发 Java 笔试题

[编码题|20分] 找周期

时间限制:C/C++ 5秒,其他语言 10秒 
空间限制:C/C++ 65536K,其他语言 131072K 

题目描述 

对于严格递增的正整数数列A=a1、a2、……、an,如果一个正整数T满足: 
1)对于数列A中的任意元素x,如果x+T不大于an,则x+T也是数列A中的元素 
2)对于数列A中的任意元素x,如果x-T不小于a1,则x-T也是数列A中的元素 
那么称T为数列A的周期,如果同时满足: 
3)所有小于T的正整数,都不是A的周期 
则称T为A的最小周期 
输入描述: 
每组测试样本的输入格式为: 
第一行是一个正整数N 
从第二行开始,每行有若干个正整数,依次存放n、a1、a2、……、an,一共有N行,也就是N个数列。 
输出描述: 
输出有N行,每行打印出对应数列的最小周期。 
示例1 
输入 

3 1 2 3 
3 2 4 6 
3 3 4 6 
输出 



说明 
数据范围: 
N:0

[编码题|20分] 拼硬币

时间限制:C/C++ 1秒,其他语言 2秒 
空间限制:C/C++ 65536K,其他语言 131072K 

题目描述 


现有n1+n2种面值的硬币,其中前n1种为普通币,可以取任意枚,后n2种为纪念币,每种最多只能取一枚,每种硬币有一个面值,问能用多少种方法拼出m的面值? 
8 输入描述: 
第一行三个整数n1, n2, m,分别表示普通币种类数,纪念币种类数和目标面值 
第二行n1个整数,第i种普通币的面值a[i]。保证a[i]为严格升序。 
第三行n2个整数,第i种纪念币的面值b[i]。保证b[i]为严格升序。 
对于30%的测试,保证1<=n1+n2<=10,1<=m<=100,1<=a[i]<=100 1<=b[i]<=100 
对于100%的测试,保证1<=n1+n2<=100, 1<=m<=100000, 1<=a[i]<=100000 1<=b[i]<=100000 
输出描述: 
输出一行,包含一个数字x,表示方法总数对1000000007(1e9+7)取模的结果。 
注意:不要忘记取模! 
示例1 
输入 
3 1 5 
1 2 3 

输出 

说明 
(x)代表面值为x的普通币,[x]代表面值为x的纪念币,样例所有方法数如下: 
(1)(1)(1)(1)(1) 
(1)(1)(1)(2) 
(1)(1)(3) 
(1)(2)(2) 
(2)(3) 
(1)(1)(1)(1)[1] 
(1)(1)1 
(1)1 
1(2) 
备注: 
两个方法,它们任意一种或以上的硬币数量不同,则认为是两种拼法。

[编码题|20分] 矩形游戏

时间限制:C/C++ 1秒,其他语言 2秒 
空间限制:C/C++ 65536K,其他语言 131072K 

题目描述 


小a在玩一个很简单的游戏,游戏的内容是控制一个小人在一块矩形的空地内走,一旦小人走出矩阵范围,游戏就失败。游戏机有上,下,左,右四个按键,每按一下小人就向相应的方向走一步。这个游戏过于简单,小a说:“这种游戏我闭着眼睛玩都输不了”。于是他便闭上眼睛,进行一连串的操作。但若他中途输了的话就会停止。 
那么问题来了:给定小a的操作,进行Q次询问,你能算出每次询问小人能走多少步吗? 
输入描述: 
第一行为长度L的字符串S,每个字符依次代表小a的一次操作。’u’代表向上,’d’代表向下,’l’代表向左,’r’代表向右。字符串S不会包含其他字符。 
第二行是整数Q,代表Q次询问 
接下来Q行,每行有四个整数,N,M,X,Y,保证1<=X<=N,1<=Y<=M,矩阵大小为N*M,小人初始位置为(X, Y)。 
对于30%的测试,0

[编码题|20分] 有理数

时间限制:C/C++ 1秒,其他语言 2秒 
空间限制:C/C++ 65536K,其他语言 131072K 

题目描述 


升序数组中第一个是1, 后续为若干连续的素数,对于数组里面的元素m和n(m < n)都对应了一个有理数m / n, 现在给定这个数组和一个K,要求返回第K小的有理数。 
输入描述: 
每组测试样本的输入格式为: 
第一行是一个正整数N 
从第二行开始,每行有若干个正整数,依次存放K、a1、……、an,一共有N行,也就是N组参数。 
K是输入参数表示需要寻找的顺序第K小的有理数, a1 - an 是以1开始后续n - 1个素数。 
输出描述: 
输出有N行,每行两个数字m和n,空格隔开,分别表示第K小有理数的分子和分母。 
示例1 
输入 

3 1 2 3 5 
输出 
2 5 
备注: 
m、n必须为a1 - an中的满足条件的两个数。 
数据范围为: 
10 <= N <= 20000 
10 <= K <= 20000 
1 <= m < n < 20000

[编码题|20分] 电容充电

时间限制:C/C++ 1秒,其他语言 2秒 
空间限制:C/C++ 65536K,其他语言 131072K 

题目描述 


有一台用电容组成的计算器,其中每个电容组件都有一个最大容量值(正整数)。 
对于单个电容,有如下操作指令: 
指令1:放电操作 - 把该电容当前电量值清零 
指令2:充电操作 - 把该电容当前电量补充到其最大容量值 
对于两个电容A和B,有如下操作指令: 
指令3:转移操作 - 从A中尽可能多的将电量转移到B,转移不会有电量损失,如果能够充满B的最大容量,那剩余的电量仍然会留在A中 
现在已知有两个电容,其最大容量分别为a和b,其初始状态都是电量值为0,希望通过一系列的操作可以使其中某个电容(无所谓哪一个)中的电量值等于c(c也是正整数),这一系列操作所用的最少指令条数记为M,如果无论如何操作,都不可能完成,则定义此时M=0。 
显然对于每一组确定的a、b、c,一定会有一个M与其对应。 
输入描述: 
每组测试样本的输入格式为: 
第一行是一个正整数N 
从第二行开始,每行都是3个正整数依次组成一组a、b、c,一共有N组 
输出描述: 
输出为N行,每行打印每一组的对应的M 
示例1 
输入 

3 4 2 
2 3 4 
输出 


说明 
对于(3,4,2),最少只需要4个指令即可完成: 
(设最大容量为3的是A号电容,另一个是B号电容) 
充电 A转移 A->B充电 A转移 A->B 
此时A中当前电量为2,操作完成,所以输出4。 
对于(2,3,4),显然不可能完成,输出0。 
备注: 
数据范围: 
N:0

车厢排序

一列火车有n个车厢标记为1,2,3,4,5,6…n 
现在因为某些原因,需要调整车厢的相对顺序 
例如需要将车厢顺序调整为2,3,1,4,5,6…n 
由于车厢庞大,且车厢只能停留在铁轨上,所以不能随心所欲的调整相对顺序

现在只能利用两条并行的铁轨对车厢的顺序进行调整 
例如 
原序列为1,2的车厢 
车厢1进入铁轨1停止 
车厢2进入铁轨2,然后再开出 
然后铁轨1上的车厢1再开出 
这样可以使得车厢2调整到车厢1得前面

现在给你一个期望得到的车厢顺序,请你判断该顺序能否通过以上方法调整车厢顺序而得到 
(车厢只能前进无法后退) 
输入格式 
第一行n表示有n个车厢 
第二行有n个数为1~n的排列用空格隔开,表示期望得到的车厢顺序

输出:若可以得到则输出Yes 否则输出No

样例输入1: 

2 1 
样例输出1: 
Yes

样例输入2: 

3 4 1 5 2 
样例输出2: 
Yes

样例输入3: 

3 4 2 1 5 
样例输出3: 
No

出题数量

一些出题人出了n道题,每道题有一个难度系数,难度系数满足以下关系的3道题可以组成一套试卷,为了使这n道题使用上且只能使用一次,问出题人最少还要出多少题?

a<=b<=c

b-a<=10;

c-b<=10;

笔试题目

选择填空的内容为:计组、概率论、其他高中数学基本知识

编程题1:输入16进制数(1,2…f..)组成的矩阵,由左上角开始,到右下角,只能向右或下走,找出另走过的数的乘积的16进制数后缀0最少的方法。

编程题2:给定长度为n序列,分割成m段,找出令分割后 “数值之和最大的段” 最小的分割方法

选择填空重点:

      • 计组:四路组相连+RLU 
        1、FIFO – 先进先出 
        如果一个数据最先进入缓存中,则应该最早淘汰掉。 
        2、LRU – 最近最久未使用 
        应当把最久没有被访问到的数据淘汰。 
        3、LFU – 最近最少使用 
        一个数据在最近一段时间内使用次数最少
      • 概率论: 已知A、B都条件独立于C,已知P(A|C)、P(B|C),问P(A|B,C)?

      • 已知一个一元四次方程,给了f(1)、f(2)、..f(5)的值,问f(6)?

      • 问检验假设、置信区间

猜你喜欢

转载自www.cnblogs.com/huzhongyu/p/9434422.html