PythonTip--8.1

加油站

题目描述:

一个环形的公路上有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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值