【python】超菜der数据分析师笔试

今天透小菜参加了xx的数据分析实习生的笔试,
五道编程题目,还有两道都没来得及读,前面三道通过率也没达到百分之百。别问我为什么这么菜,我也不知道自己为啥子这么菜,
现在来反思一下下,
首先,当然代码练得不够多是一个原因,我发现我只会用for循环啊,过于菜了;
其次,在编程时候没有形成框架,没头没脑的开写,下次试着先用注释写好思路,再加细完成每一步,考虑详细的步骤吧;
还有,在第一个题目case通过率67%的时候我还不满足,调了半个小时调到80%,这个是时间浪费的让我有点肝疼,这应该属于笔试经验不足,回头多找些经验贴在这。

第一个题目:

有一个很经典的问题是,当前时间是aa:bb,请问若干分钟后是什么时间?我们今天的问题是一个相反的问题。

已知现在的时刻是星期x的yy:zz时刻,请问n分钟前是周几,时间是多少。

例如现在是周三,02:10,则200分钟之前,应该是周二,22:50。

输入 含三行:
第一行一个正整数x,表示今天是周x。(1<=x<=7)

第二行是一个24小时制的时间表示,时和分均含前导0,例如,1时1分表示为01:01。保证时间格式是合法的。

第三行是一个正整数n,表示要求的是n分钟之前的时间。(1<=n<=10^9)

输出 :
包含一个正整数,表示n分钟之前是周几, 空格后面输出时间。

一个24小时制的时间表示,时和分均含前导0,例如,1时1分表示为01:01。表示n分钟之前的时刻。

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

提示: 本题中我们认为: 周四 00:01的前1分钟为 周四 00:00 周四 00:00的前1分钟为 周三 23:59

改到最后自己也蒙了,不知道bug在哪,看到的大神能指点一下下:

n = int(input())#输入星期几

pretime = str(input()) #输入当前时间
hour = int(pretime[0:2]) #当前几时
minu = int(pretime[3:5])#当前几分

m = int(input())

#先从分钟开始算
if m%60 <= minu:
    minu -= m%60
else:
    minu = 60 - (m%60 - minu)
    hour -= 1 #向小时借位
minu = str(minu) if minu>9 else '0'+str(minu)

#再计算小时
if (m//60)%24 <= hour:
    hour -= (m//60)%24
else:   
    hour = 24 - ((m//60)%24- hour)
    n = n- 1 #向星期借位 
hour = str(hour) if hour>9 else '0'+str(hour)

#最后计算星期几
n -= m//(60*24)
if n <= 0:
    n = n%7
time = hour+':'+ minu
print(n,time)

第二个题目

题目描述: “我将带头冲锋。”每一个军人如是说。
某部队举办了一届军事运动会,其中有一个团体马拉松项目,有n名选手按顺序从起跑线出发,并且记录下他们到达终点的顺序。在跑步过程中超越了其他人的选手要给予表彰。

受表彰的选手需要满足的条件是,如果存在一名出发顺序排在选手X之后的选手Y先于X到达终点,则认为Y超越了X。

对于每一个选手,只要他超越了任意一个人,就有资格受到表彰。请你计算出有多少人可以得到表彰。

输入
输入第一行仅包含一个正整数n,表示选手数量。(1<=n<=10^5)

输入第二行包含n个正整数,是一个1-n的排列A,表示出发顺序,A[i]表示第i个出发的选手的编号。

输入第三行同样包含一个1-n的排列B,表示到达顺序,B[i]表示第i个到达的选手的编号。

输出
输出仅包含一个整数,表示得到表彰的人数。

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

样例解释: 显然除了5号和3号以外,其他人都可以受到表彰,因为他们均超越了3号。

也是上来没头没脑写一通,思路简单到没有,
就是逐个检查A里面第二个开始的元素,在B中的索引是否小于它之前的任何一个。

不知道大家有没有好的思路.

n = int(input())
A = list(map(int,input().split()))
B = list(map(int,input().split()))
count = 0
for i in range(1,n):
    for j in range (i):
        if B.index(A[i]) < B.index(A[j]):
            print(A[i])
            count+=1
            break  
print(count)

第三个问题

作为一个程序员,修bug(补漏洞)是一项基本的工作。当你刚刚完成一个工作的时候,甲方说你的程序里面有n个bug。
但是你已经很累了,你希望第一天修x个bug,第二天修[x/k]个bug,第三天修[x/k2]个bug,以此类推,第d天修[x/k^(d-1)]个bug,直到修不了bug为止。

[x]的意思是x向下取整。在k大于1的时候,总有一天会修不了一个bug的。所以,你希望在这一天来临之前,修完所有的bug。你要计算,你第一次至少要修多少个bug,即x的最小值为多少。

输入
输入包含一行两个整数n , k 分别代表漏洞总数和题目中的参数k

输出
输出包含一个数,即x的最小值

样例输入
10 3
样例输出 8
提示 范围 1<=n<=10^9 , 2<=k<=10

样例解释: 第一天修8个bug,第二天修2个bug,从第三天开始修不了bug,总共修了10个,修完了所有的bug。
如果第一天只修7个bug,那么第二天只能修2个bug,从第三天修不了bug,总共修了9个bug,不能完成目标,所以第一天至少修8个bug。

这个啊,在考试结束的时候我终于发现了错在哪了,还没来得及测试case
也是无敌傻瓜式思路:

欢迎大家帮我挑bug,以及提供新思路!

n,k = map(int,input().split())
for x in range(n//k,n):
    sum = x
    i = 1
    while (k**i)<=x:
        print(k**i)
        sum += x//(k**i)
        print(x,i,sum)
        i+=1
    if sum >= n:
        print(x)
        break
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值