今天透小菜参加了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