• 详解算法题目:幼稚班作业


    题目链接:https://edu.csdn.net/skill/program/28758?practiceId=13042531

    一、题目描述

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

    输入描述:

    输入四根木棍的长度。

    输出描述:

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

    示例

    输入1 2 3 4
    输出1

    二、解题思路

    过来人的提示:

    • 只需要用任意三根搭三角形即可,不用四根全用上!不用四根全用上!不用四根全用上!
    • 判断三角形的条件:任意两边之和大于第三边,任意两边之差小于第三边。

    加上这两点提示基本就没有什么大问题了~~~
    ps:太坑了!测试第一个浪费我一个多小时时间……一开始都聚焦在四根上,以为有bug,想了好久,也做了不少测试。结果把全部关于4根木棍拼凑的代码注释掉,尝试运行,结果竟然通过了。

    接下来讲下我的一些思考:
    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]

    最后的结果如下两排#中间的代码:

    
    # 请关闭中文输入法,用英文的字母和标点符号。
    # 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
    # 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
    # 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
    # 模版代码提供基本的输入输出框架,可按个人代码习惯修改
    
    
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    2-egg-TS-通用后端管理注册系统-普通、邮箱和手机注册校验
    游戏行业安全选择游戏盾,效果怎么样?
    Spring篇---第六篇
    基于PHP的汽车能耗优化系统设计与实现
    centos7多主机--实现时间同步chrony服务
    基于Echarts实现可视化数据大屏3D元素周期表(1页)
    如何提⾼webpack的打包速度?
    时间复杂度与空间复杂度
    【Day-30慢就是快】代码随想录-二叉树-找树左下角的值
    REST风格
  • 原文地址:https://blog.csdn.net/qq_45476428/article/details/127742258