幼稚班作业(python)

题目描述

幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑,如果不能拼接成三角形。 必然要折断某个木棍来拼接三角形。 可是懒惰的小艺当然不会费力了! 如果拼接不成三角形小艺就会把它凭借成类似边长 1 1 2的伪三角形。 如果伪三角形都拼接不成那就不交作业!

 输入描述:

输入四根木棍的长度。

 输出描述:

 拼接成正常三角形输出”1”,伪三角形输出”0”,否则输出”-1”。

示例 

输入1 2 3 4
输出1

 二、解题思路

  • 只需要用任意三根搭三角形即可,不用四根全用上。
  • 判断三角形的条件:任意两边之和大于第三边,任意两边之差小于第三边。
  • 1、基于三角形的判断条件,其实不需要遍历值,真的通过任意两边之和之差和第三边比较,只需要判断临界值即可,即两小边之和大于长边,长边和短边之差小于中间的边。所以问题又简单化了一些;
  • 2、四根木板怎么取舍呢?总共4种取法,其实分成两次取即可,一次取三根长的,一次取三根短的。举例说明吧:假设是1 2 3 4,一次取1 2 3,一次取2 3 4,其他的情况可以不用管,因为1 2 3结果不为1,将2替换为4更不可能为1;如果2 3 4结果不为1,那将2替换为1,结果更不可能为1。

  • 3、那怎么确认三条边的大小呢?首先对列表排序,然后分别取前三个和后三个,如果是升序,则arr[0]<arr[1]<arr[2]<arr[3]。

    代码如下

class Solution:
    def __init__(self) -> None:
        pass
    
    def solution(self, arr):
        result = None
        
        ###################################################################
        # TODO: 请在此编写代码
        # 逻辑:两边之长大于第三边,两边之差小于第三边,用3大3小判断
        arr.sort()           # 升序排列
        if   arr[0] + arr[1] > arr[2] and arr[2] - arr[0] < arr[1]: # 3小
            result = 1
        elif arr[1] + arr[2] > arr[3] and arr[3] - arr[1] < arr[2]: # 3大
            result = 1
        elif arr[0] + arr[1] == arr[2] or arr[1] + arr[2] == arr[3]:# 伪三角
            result = 0
        else:
            result = -1
        ###################################################################

        return result

if __name__ == "__main__":
    arr = [int(item) for item in input().strip().split()]
    sol = Solution()
    result = sol.solution(arr)
    print(result)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值