字节跳动2020秋招笔试题(python)

1.闹钟叫醒去上课

1.1描述

(1)题目描述

小明总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起来。
从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时候起床。

(2)输入描述

每个输入包含一个测试用例

每个测试用例的第一行包含一个整数,表示闹钟的数量N(N <= 100)

接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0 <= A < 24)时Mi(0 <= B < 60)分

接下来的一行包含一个整数,表示从他起床算起他需要X(0 <= X <= 100)分钟到达教室

接下来的一行包含两个整数,表示上课时间为A(0 <= A < 24)时B(0 <= B < 60)分

数据保证至少有一个闹钟可以让牛牛及时到达教室

(3)输出描述

输出两个整数表示牛牛最晚起床时间

(4)示例

输入:

3
5 0
6 0
7 0
59
6 59

输出:

6 0

1.2Python程序

import numpy as np

N = eval(input('input 1:'))
my_input = np.zeros((N+3,3), dtype=int)
my_input[0,0] = N
shape = my_input.shape

for i in range(1, shape[0]):
    data = input('input %d:'%(i+1)).split( )
    if(len(data)==2):
        my_input[i,0] = int(data[0])
        my_input[i,1] = int(data[1])
    else:
        my_input[i,1] = int(data[0])
    
    my_input[i,2] = 60 * my_input[i,0] + 1 * my_input[i,1]
        
for j in range(shape[0]-3,0,-1):
    if((my_input[j,2]+my_input[-2,2])<=my_input[-1,2]):
        print('%d %d'%(my_input[j,0], my_input[j,1]))
        break

2. 秘密通信

2.1描述

(1)题目描述

小明和安琪是好朋友。最近,他们的谈话被一家侦探机构监控,所以他们想将他们的谈话内容进行加密处理。
于是,他们发明了一种新的加密方式。每条信息都被编译成二进制数B(明文),其长度为N。
然后该信息被写下K次,每次向右移动0,1,...,K-1位。
例如:B = 1001010,K=4
1001010
 1001010
  1001010
   1001010
然后对每一列进行异或操作,并且把最终所得的结果记录下来,我们将该数称为S(密文)。
例如上述例子的结果为:1110100110。
最后,将编码的信息S和K发送给安琪。
小明已经实现了这种编码的加密过程,但他要求安琪写一个程序去实现这种编码的解密过程,你能帮助安琪实现解密过程吗?

(2)输入描述

第一行输入两个整数 N 和 K

第二行输入一个二进制字符串S,长度是N + K - 1

(3)输出描述

输出明文B

(4)示例

输入:

7 4
1110100110

输出:

1001010

2.2Python程序

import numpy as np

nk = input('Input N and K:').split( )
nk=np.array([int(x) for x in nk])
N=nk[0]
K=nk[1]

S = input('Input S:')
S=np.array([int(x) for x in S])  # 密文

B = np.zeros((N,),dtype=int)  # 明文

data = np.zeros((K,N+K-1),dtype=int)

for k1 in range(0,N):
    res=data[0,k1]
    for k2 in range(1,K):
        res^=data[k2,k1]

    if(res!=S[k1]):
        B[k1]=1
        h1=[]
        for m1 in range(0,K):  
            h1.append(m1)
        h2=[]
        for m2 in range(k1,k1+K):
            h2.append(m2)
        for h in range(0,K):
            data[h1[h],h2[h]]=1
  
print('\n',''.join([str(x) for x in B.tolist()]))

3.万万没想到之抠门的老板

3.1描述

(1)题目描述

我叫王大锤,是一家互联网公司的老板,快到年底了,要给员工发奖金。
真头疼,大环境这么差,怎么才能尽可能的少发点、同时还能让大家怨气少一点呢?
公司的座位是排成一排的,每个人都最多打听的到和自己相邻左右两个人的奖金数,我决定这样发:

1. 每个人都至少发100块。
2. 论资排辈:每个人加入公司的年限是公开的,如果一个员工A加入公司的时间比领座的同事B早,那A至少比B多拿100块。这样,他的心理会平衡一些。

我特喵是个天才!将人性理解的如此透彻,做一个小公司的老板真是屈才了。
······
万万没想到,发完奖金,所有员工都离职了,都跳槽去了一家叫字节跳动的公司,他们都说这家公司一不论资排辈,二不吃大锅饭,
奖罚分明,激励到位,老板还特大方,说的我都想去应聘了......

请听题:给定大锤公司员工的座位表,以及每个员工的入职时间,计算大锤最少需要发多少奖金。

(2)输入描述

第一行只有一个正整数 N (1 <= N <= 1000),表示员工人数

第二行有N个正整数,代表每个员工的入职年限。排列顺序即为员工的座位顺序。

(3)输出描述

一个数字,代表大锤最少需要发的奖金总数。

(4)示例

输入:

4
3 9 2 7

输出:

600

说明:

每人奖金数为(100,200,100,200)

3.2Python程序

import numpy as np

N = eval(input('Input the number of people: '))
bonus = 100 * np.ones((N,),dtype=int)
order = input('Input order:').split( )
order=np.array([int(x) for x in order])

idx = np.argmin(order)

for k1 in range(idx+1,N):
    if(order[k1]<=order[k1-1]):
        break
    else:
        bonus[k1]=bonus[k1-1]+100
   
for k2 in range(idx-1,-1,-1):
    if(order[k2]<=order[k2+1]):
        break
    else:
        bonus[k2]=bonus[k2+1]+100

S=sum(bonus)
print(f'\n奖金数为:{S}')

4.跑步

没看懂

 

参考:字节跳动2020届秋招笔试题(https://blog.csdn.net/hzj1998/article/details/99285786)

你可能感兴趣的:(面试)