每日一练
有n个人要过河,只有1只船,船的承载为x千克,现知道n个人的体重和船的承载x,请思考如何编程计算出这n个人渡河乘船的最少次数。例如:
People中表示人们的体重,limit表示船的承载量

题目链接:
https://leetcode.com/problems/boats-to-save-people/description/
作者:someone
编辑:Aomi

训练类型:循环、判断
python环境:python3.5
训练时长:30mins

思路介绍
1) 对输入的people列表数据进行降序排序;
2) 判断people列表中元素是否小于limit,若否,此人一人乘船;若是,进入第3步;
3) 该元素加上people列表末尾的元素,再判断是否小于limit,若等于limit,这两人一起乘船;若大于limit, 此人一人乘船;若小于limit,继续加people列表中其他元素,重复3步骤;
4) 直至所有人都过河。
代码展示
# 对people列表降序排序
def bubSort(a):
i = 0
b = a.copy()
for j in range(0, len(a) - 1):
if a[j] <a[j + 1]:
a[j], a[j + 1] = a[j + 1], a[j]
if a != b:
i += 1
a = bubSort(a)
# 计算所有人过河的最少次数
def boatRiver(a, limit):
bubSort(a)
m = len(a) - 1
count = 0
for i in range(0,len(a)):
c = a[i]
if i <= m:
if c < limit:
while i<m and c < limit:
c += a[m]
m -= 1
if c == limit:
count += 1
elif c > limit:
count += 1
m += 1
elif c < limit:
count += 1
else:
count += 1
else:
return count
return count
# 运行1
In: people = [1,2]
limit = 3
c = boatRiver(people,limit)
c
Out: 1
# 运行2
In: people = [3,2,2,1]
limit = 3
c = boatRiver(people,limit)
c
Out: 3
# 运行3
In: people = [3,5,3,4]
limit = 3
c = boatRiver(people,limit)
c
Out: 4
思考
请思考其他的方法,解决此问题
join us
加入打卡训练群


-长按关注-

理解编程语言,探索数据奥秘
每日练习|干货分享|新闻资讯|公益平台。
每天学习一点点,你将会见到全新的自己。

长按二维码关注我们




