某数据开发工程师实习生笔试题目(Python语言)

某数据开发工程师实习生笔试题目(Python语言)

记录第一次参加线上编程考试。
一共有5道题目,其中我只做了1、2,第2道最后思路对了,但是没时间改了(中途去拉肚子了)一开始没仔细看题目要求,以为只可以用C++语言写,两年没写C++了都快忘完了,后来再仔细看看,原来可以选择其它语言,这里也拖了很多时间。
趁我还记得,先记一下第一道题。

  1. 输入三个数,分别对应星期几时间aa:bb格式),往前推移的分钟数
  2. 通过程序运行得到往前推移得到新的星期几新的时间,并输出

举例:

输入:
3
02:10
200
输出:
2
22:50

我的代码

day表示星期
time表示
delta表示往前推移的时间间隔
注意:星期四的00:00前一分钟是星期三的23:59

day=int(input())
time=input()
delta=input()
h=int(time[0:2])
mins=int(time[3:5])
for i in range(int(delta)):
    if mins==0:
        if h==0:
            if day==1:
                day=7
                h=23
                mins=59
                continue
            if day!=1:
                day-=1
                h=23
                mins=59
                continue
        if h!=0:
            h-=1
            mins=59
            continue
    if mins!=0:
        mins-=1
print(day)
if h<10:
    print('0'+str(h)+':'+str(mins))
if h>=10:
    print(str(h)+':'+str(mins))

输入和输出结果:

3

02:10

200
2
22:50

第2道:

  1. 输入一个数,代表参加跑步比赛的总人数
  2. 输入一列数,空格隔开,代表运动员出发的顺序
  3. 输入一列数,空格隔开,代表运动员到达终点的顺序
  4. 通过程序计算,有多少个运动员在比赛过程中超过了其之前出发的任意一个运动员,并授予奖章
  5. 输出一个数,表示多少个人获得奖章

举例:

输入:
5
5 3 1 4 2#A[i]表示第i个出发的运动员的编号
2 4 5 1 3#B[i]表示第i个到达的运动员的编号
输出:
3#除了3号和5号运动员,其余人都可以拿到奖章,因为他们都至少超过了出发在他们之前的一位运动员

我的代码

n=int(input())
a1=input().split()
a2=input().split()
num=[]
for k in range(1,n+1):
    num.append(str(k))
A=dict(zip(a1,num))
B=dict(zip(num,a2))
flag=0
for i in range(1,n+1):
    for j in range(i+1,n+1):
        i=str(i)
        j=str(j)
        if int(A[B[j]])<int(B[i]):
            flag+=1
            break
print(flag)

输入和输出结果:

5

5 3 1 4 2

2 4 5 1 3
3

注意
一开始的时候,if int(A[B[j]])个位数运动员的情况都可以正确输出。但是我手贱试了一下10个运动员,就出错了,结果和实际对不上,想了半天也没想明白是为什么。
后来去洗澡了,洗着洗着就恍然大悟,原来是这句if出现了问题,整个程序中出现了多次str和int的转换,唯独这里忘了,因为字符串的比较从第一个字符开始,所以’10’和’1-9’比较的时候总是’10’小,导致两位数运动员的情况下会出错。

Python语言还是初学,C++虽然不能算初学了,但也快忘光了,好多排序法都不记得了,接下来还是要继续理论结合实践,努力学习嗷

你可能感兴趣的:(Python笔试题)