修剪灌木-蓝桥杯真题-python解法

题目描述

解题思路

解法一:暴力解法,按照题目要求每一次生长就遍历所有的树,裁剪就把该裁剪那一颗归为0,这样只要不限制时间和内存肯定是能全做出来的,但是考试只能拿50分其他会超限

解法二:用数学思想来做就是,一棵树的最大生长高度应该是第一次被剪到的时候再到第二次被剪到的时候这个中间时间的生长高度。其实也就是这颗树距离边界距离的二倍。因为碰到边界后会返回刚好是双倍距离这个路程用来生长。

代码

解法一暴力解法

    n=int(input())
    tree=[0]*n
    maxtree=[0]*n
    cut=0
    reverse=False
    for i in range(50):
        for i in range(len(tree)):
            tree[i]+=1
        for i in range(len(tree)):
            if tree[i]>maxtree[i]:
                maxtree[i]=tree[i]
        tree[cut] = 0
        if cut == 0:
            reverse = False
        if cut == len(tree) - 1:
            reverse = True
        if reverse == False:
            cut += 1
        else:
            cut -= 1
    for i in maxtree:
        print(i)

解法二数学思想之两倍路程

    n=int(input())
    for i in range(n):
        left=i-0
        right=n-i-1
        print(2*max(left,right))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值