20180415字节跳动今日头条笔试题——后台研发方向

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

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值