1 问题
你打算用一个水罐给花园里的n株植物浇水。植物排成一行,从左到右进行标记,编号从0到n-1,其中,第i株植物的位置是x=i.x=-1处有一条河,你可以在那里重新灌满你的水罐。
每一株植物都需要浇特定量的水。按下面描述的方式完成浇水:
最初,你在河边(也就是x=-1),在x轴上每移动一个单位都需要一步给你一个下标从0开始的整数数组plants,数组由n个整数组成.其中plants[i]为第i株植物需要的水量。另有一个整数capacity表示水罐的容量,返回浇灌所有植物需要的步数。
2 方法
我们用一个变量a来接收给plants[i]浇水后剩余的水量,再用一个变量distance来计算步数.
如果a>=plants[i+1],则可以继续给下一株植物浇水,从i到i+1需要的步数就是1,紧接着就先判断剩余的水能否够继续给下一株植物浇水.
如果a<plants[i+1],则需要从plants[i]处返回河边x=-1位置处灌满水,需要的步数是i-(-1)=i+1步,从x=-1来到plant[i+1]位置处浇水,需要的步数为(i+1)-(-1)=i+2步.当最后一株植物浇水完成后,直接返回distance的值.
3 实验结果与讨论
通过实验、实践等证明提出的方法是有效的,是能够解决开头提出的问题。
代码清单 1
plants = [2, 2, 3, 3] cap = 5 a = cap distance = 0 for i in range(len(plants) - 1): if plants[i] <= a: a = a - plants[i] if plants[i + 1] <= a: continue distance = (i + 1) * 2 + distance a = cap print(distance + len(plants)) |
---|
4 结语
针对给植物浇水返回步数问题,提出利用浇水后剩余水量和下一株植物需水量作比较,判断出是否可以继续浇水,从而计算出所需的步数的方法,通过一步一步的计算和简单的例子,以及最终的运行结果都可以证明该方法是有效的。
实习编辑:衡辉
稿件来源:深度学习与文旅应用实验室(DLETA)