加油站
题目描述:
一个环形的公路上有n个加油站,编号为0,1,2,…n-1,
每个加油站加油都有一个上限,保存在列表limit中,即limit[i]为第i个加油站加油的上限,
而从第i个加油站开车开到第(i+1)%n个加油站需要cost[i]升油,cost为一个列表。
现在有一辆开始时没有油的车,要从一个加油站出发绕这个公路跑一圈回到起点。 给你整数n,列表limit和列表cost,你来判断能否完成任务。
如果能够完成任务,输出起始的加油站编号,如果有多个,输出编号最小的。 如果不能完成任务,输出-1。
思路:
从0开始,循环N次。变量sum为汽车油箱的油量,若小于0,则不成功退出。变量count为汽车开过的加油站个数,若等于n则说明已经完成一圈,输出加油站序号,否则继续循环。
代码:
n=3
limit = [0,2,3]
cost = [1,2,2]
def func(n,limit,cost):
for i in range(n):
sum = 0
count = -1
while True:
if sum >= 0 :
# print(i)
count += 1
sum += limit[i]
sum -= cost[i]
if count == n:
return i
break
i+=1
if i > n-1:
i -= n
else:
break
return -1
print(func(n,limit,cost))
============分割线=============
相同数字
题目描述:
给你一个整数列表L,判断L中是否存在相同的数字,
若存在,输出YES,否则输出NO。
思路:将列表L转化成集合,因为集合是没有相同数字的,所以可以比较列表和集合的大小,若相同则说明没有相同的数字。
代码:
L=[1,2,3,3]
def func(L):
s = set(L)
if len(L) != len(s):
return 'YES'
else:
return 'NO'
print(func(L))
============分割线=============
判断三角形
题目描述:
给你三个整数a,b,c, 判断能否以它们为三个边长构成三角形。
若能,输出YES,否则输出NO。
思路:先将三条边的大小进行排序,然后比较三边大小是否满足三角形:两边之和大于第三边。
代码:
a,b,c = 11,2,3
def func(a,b,c):
a,b,c = sorted((a,b,c))
if a+b<=c:
return 'NO'
else:
return 'YES'
print(func(a,b,c))
============分割线=============
山峰的个数
题目描述:
十一假期,小P出去爬山,爬山的过程中每隔10米他都会记录当前点的海拔高度(以一个浮点数表示),
这些值序列保存在一个由浮点数组成的列表h中。回到家中,小P想研究一下自己经过了几个山峰,请你帮他计算一下,输出结果。
例如:h=[0.9,1.2,1.22,1.1,1.6,0.99], 将这些高度顺序连线,会发现有两个山峰,故输出一个2(序列两端不算山峰)
思路:
从列表中第1个数开始比较(列表序号从0开始),若大于两边的数字则count加1。最后输出count。
代码:
h=[0.9,1.2,1.22,1.1,1.6,0.99]
def func(h):
count = 0
for i in range(1,len(h)-1):
a = h[i-1]
b = h[i]
c = h[i+1]
if a < b >c:
count+=1
return count
print(func(h))
============分割线=============
三角形形状
题目描述:
给以一个三角形的三边长a,b和c(边长是浮点数),请你判断三角形的形状。
若是锐角三角形,输出R,
若是直角三角形,输出Z,
若是钝角三角形,输出D,
若三边长不能构成三角形,输出W.
思路:三边排序,然后进行比较。
代码:
import math
def func(a,b,c):
a,b,c = sorted((a,b,c))
if a +b <=c:
return 'W'
s = math.sqrt(a*a+b*b)
if c ==s:
return 'Z'
elif c <s:
return 'R'
else:
return 'D'
print(func(a,b,c))