首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模算术拼图码

模算术拼图码
EN

Stack Overflow用户
提问于 2019-04-24 11:58:05
回答 1查看 139关注 0票数 0

一辆汽车以每秒v米的速度从A点移动到B点。动作发生在X轴上.离A d米处有交通灯。从时间0开始,对于第一个g秒,绿灯是开着的,接下来的r秒是红灯,然后绿灯是亮着的,以此类推。

汽车可以立即加速从0到v,反之亦然,可以立即减速从v到0。考虑一下,它会立即通过绿灯处的红绿灯。当红灯刚亮的时候,如果汽车接近红绿灯,它就没有时间过去了。但是如果它在绿灯刚亮的时候接近红绿灯,它就可以移动了。这辆车在0点离开A点。

在不违反交通规则的情况下,汽车从A点到B点的最短时间是多少?

输入整数l,d,v,g,r (1 ≤ l, d, v, g, r ≤ 1000, d < l) --A到B之间的距离(以米为单位),A到交通灯的距离,汽车的速度,绿灯的持续时间和红灯的持续时间。

溶液

代码语言:javascript
复制
if(g*v>d)
 ans = l/v   // i got it
else
 ceil(d/v/g+r)*(g+r)+(l-d)/v  // i am not getting Please help

例子->假设l=5,d=4,v=1,g=2,r=1

在t=0,汽车从$A $开始

在t=2,灯变红了,但是汽车离灯光很远,所以没有问题继续前进

在t=3,绿灯再次变绿,每秒钟2美元(直到$t=5$)

在t=4,灯光依然是绿色的,我们到达了光明的地方。

注意->我们已经过了红绿灯别担心

在t=5,我们到达B点

但是正确的ans =7,这不是我做错的最小值吗?

上面的方法是由一个红色的编码器和我包括他的解决方案链接下面也。

请帮助我感到难过,我正试图从三天内找到正确的逻辑。

你们是我最后的希望。

问题链接问题b

红色编码器的可接受解决方案链接

注->上面接受的解决方案,提供7作为输出,但我认为应该是5,所以这不会是错误的,因为代码强制接受它。

EN

回答 1

Stack Overflow用户

发布于 2019-04-24 19:57:37

是的,你是对的,答案应该是5。

条件g * v > d没有任何意义。它只是检查你是否可以通过交通灯在第一个绿色阶段。实际上应该是((d + v - 1) / v) % (g + r) < g。首先,我们用(d + v - 1) / v (整数除法)来计算红绿灯,如果我们使用浮点数,它和ceil(d / v)是一样的。然后用模数计算绿红循环中我们通过红绿灯的位置。如果结果是< g,则当它是绿色时,我们传递给它,解决方案是(double)l / v

您可以使用与上述模块相同的技术,以获得我们必须在红绿灯处停车的秒数,然后将从开始到交通灯的时间(整秒)和从交通灯到目的地的时间相加。或者,我们可以计算我们需要的秒数,直到绿色红色循环结束时,通过交通灯。这就是您所做的,但是您缺少了大括号,因此对于浮点数,我们可以使用您的公式和额外的大括号:

ceil(d / v / (g + r)) * (g + r) + (l - d) / v

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55829543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档