【算法百题之二十三】20网易面试题-游泳池-研发

【算法百题之二十三】游泳池—研发

 

    大家好,我是Lampard~~

    很高兴又能和大家见面了,接下来准备系列更新的是算法题,一日一练,早日升仙!

 

    今天的问题是:

    在开始时,给水管和排水管都是打开状态的,并且游泳池里没有水。在自动装置的作用下,每经过t1分钟,给水管的状态都会改变,即从打开状态变为关闭状态或从关闭状态变为打开状态,而同时每经过t2分钟,排水管的状态也会改变。当给水管打开时,给水管每分钟会向游泳池里注入m1升水;当排水管打开时,排水管每分钟会把游泳池里水排走m2升;当给水管和排水管同时打开时,游泳池的水量变化为每分钟(m1-m2)升。当然泳池的水量不能变为负数,同时泳池也有个最大容量m,水量不能超过m升。那么经过t分钟后,游泳池里有多少升水?

   放水又排水,梦回小学有木有???

思路:

首先依题意得,我们知道每过2*t1时间为一个进水周期,进入了m1升水。同理,2*t2是一个排水周期,排出了m2升水。

那么我们第一步:首先应应该计算出在时间t内有多少个排水周期和进水周期。

int NumT1, NumT2;    // NumT1和NumT2是进水和排水的周期数
		NumT1 = t / (t1 * 2);
		NumT2 = t / (t2 * 2);

在计算完周期之后,我们还要考虑余下的时间,进行分类讨论:如果余下的时间大于等于半个进水周期,则进水量要加上一个m,如果不足半个周期(一个t1),则按时间比例*m1增加水量.,排水同理。

double NumIn, NumOut; // NumIn是进水量,NumOut是排水量

		if (t % (t1 * 2) <= t1)
			// 第一种情况是余数小于t1,所以余数的进水量是余数*m1
			NumIn = NumT1 * m1 * t1 + t % (t1 * 2)*m1;
		else if (t % (t1 * 2) > t1)
			// 第二种情况是余数大于t1,那么就是倒入了m1*t1
			NumIn = NumT1 * m1*t1 + m1 * t1;

		if (t % (t2 * 2) <= t2)
			// 第一种情况是余数小于t2,所以余数的排水量是余数*m2
			NumOut = NumT2 * m2 * t2 + t % (t2 * 2)*m2;
		else if (t % (t2 * 2) > t2)
			// 第二种情况是余数大于t2,那么就是倒入了m2*t2
			NumOut = NumT2 * m2*t2 + m2 * t2;

然后分类讨论进水量与排水量之间的关系就可以了。结果:

 

   OK,今天的博客就到这里,谢谢大家!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lampard杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值