暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【每日一练】Boats to Save People

云南高校数据化运营管理工程中心 2018-08-20
188

每日一练


有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

加入打卡训练群

-长按关注-


理解编程语言,探索数据奥秘

每日练习|干货分享|新闻资讯|公益平台。

每天学习一点点,你将会见到全新的自己。

长按二维码关注我们


文章转载自云南高校数据化运营管理工程中心,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论