没有标准答案,只是考完后先把题目记在这里,欢迎大佬们提点思路和秀程序。
第一题
思路:迭代n-1次找最近的点、距离数累加。
自己做的代码写得比较复杂,运算时长超时,就不贴出来了 ……
同学做的case通过100%,但毕竟复杂:
import sys
myInput = sys.stdin.readline().strip()
aList = list(map(int, myInput.split()))
n,a = aList[0],aList[1]
myInput = sys.stdin.readline().strip()
aList = list(map(int, myInput.split()))
aList.sort()
if n==1:
print(0)
elif a<=aList[0]:
print(aList[-2]-a)
elif a<=aList[1]:
turn_left = min((a-aList[0])*2,aList[-1]-aList[-2])+aList[1]-a+max(0,aList[-2]-aList[1])
turn_right = aList[-1]-a
print(min(turn_right,turn_left))
elif a>=aList[-1]:
print(a-aList[1])
elif a>=aList[-2]:
turn_right = min((aList[-1]-a)*2,aList[1]-aList[0])+a-aList[-2]+max(0,aList[-2]-aList[1])
turn_left = a-aList[0]
print(min(turn_right,turn_left))
else:
turn_right = min((aList[-1]-aList[-2])*2,aList[1]-aList[0])+aList[-2]-a+max(0,aList[-2]-aList[1])
turn_left = min((aList[1]-aList[0])*2,aList[-1]-aList[-2])+a-aList[1]+max(0,aList[-2]-aList[1])
print(min(turn_right,turn_left))
第二题
用迭代方法,但是运算超时。思路应该是比较清晰的:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 10 21:24:28 2019
Tencent 2
@author: youxinlin
"""
h=[]
n=int(input())
for i in range(n):
h.append(int(input()))
height=h[::-1]
#f[i] = min(f[i-1], g[i-1]) +height[i-1] 最近一层是走上来的话,最短时间
#g[i] = min(f[i-1], f[i-2]) 最近一层是跳上来的话,最短时间
def f(i):
if i==1:
return height[0]
return min(f(i-1),g(i-1)) + height[i-1]
def g(i):
if i<=2:
return 0
return min(f(i-1),f(i-2))
print(f(n))
第三题
记得是按题意暴力解的……代码找不到了【。。】
提示:机考时编程题是允许切换窗口使用本地IDE的。可以在本地写好后粘贴进去。
第四题
题目太长没看【手动笑哭】赶脚腾讯的题目整体难度比拼多多高比较多。每一题细节处理都要很在意,边缘条件都要考虑到。导致后面时间非常紧张。
第五题
最后一题没什么时间想了,直接用简单粗暴暴力破解:
case通过率50%,时间超时,仅供参考思路。。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 10 20:12:49 2019
Tencent5 50%
@author: youxinlin
"""
n = int(input())
myList = list(map(int,input().split()))
if n>=1:
for i in range(1,n):
thisPoint = myList[i]
#对序列中的每一个元素考察:
d_List = [ abs(thisPoint - myList[j]) for j in range(0,i) ]
min_val = min(d_List)
index = 0
while index < len(d_List):
if min_val == d_List[index]:
pj = index+1
print(min_val,pj)
break
else:
#个数只有1个
pass