前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >给植物浇水

给植物浇水

作者头像
算法与编程之美
发布2021-12-08 20:05:09
2810
发布2021-12-08 20:05:09
举报
文章被收录于专栏:算法与编程之美

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)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档