-1

Dis 先生和 Aster 先生是 Fiasco Iron Works 的机械工程师。他们被指派为自动手推车设计道路,将铁矿石运送到冶炼厂。他们应该为自动手推车建造两条圆形道路。然而,Dis 先生和 Aster 先生错误地使圆形道路彼此相切(即两条圆形路径在一点相互接触)。
每天早上 0800 时,电车从相切点开始,并在各自的轨道上顺时针移动。很明显,在某些时候,手推车会在它们开始的地方发生碰撞。为了挽救手推车和对工厂运营造成的损害,工厂的总工程师要求您编写一个程序,该程序会在碰撞前 10 秒发出警报,以便工头可以停止手推车为了避免碰撞。编写一个程序来找出在警报器响起之前经过的时间(以秒为单位)。

public static int timeLapsed(int perimeter1, int speed1, int perimeter2, int speed2) {
    int greater,smaller;
    int result = 0;
    if(perimeter1 >  perimeter2)    {
        greater = perimeter1;
        smaller = perimeter2;
    }   else    {
        greater = perimeter2;
        smaller = perimeter1;
    }
    for(int i=1;i<=smaller;i++)     {
        if(((greater*i)%smaller)==0)    {
            result = greater*i;
            break;
        }
    }

    return result/speed1-10;
}

在这里,我试图计算碰撞前的距离,这基本上是 LCM 操作,然后除以速度。但这对于某些情况来说是失败的。请帮助我理解为什么。

4

2 回答 2

0

具有更大周长的皮带被考虑用于计算它在碰撞前覆盖的距离。所以速度不能随意选择,应该是周长较大的皮带。

变化

public static int timeLapsed(int perimeter1, int speed1, int perimeter2, int speed2) {
    int greater,smaller;
    int speed, result = 0;
    if(perimeter1 >  perimeter2)    {
        greater = perimeter1;
        smaller = perimeter2;
        speed = speed1;
    }   else    {
        greater = perimeter2;
        smaller = perimeter1;
        speed = speed2;
    }
    for(int i=1;i<=smaller;i++)     {
        if(((greater*i)%smaller)==0)    {
            result = greater*i;
            break;
        }
    }

    return result/speed-10;
}
于 2018-05-02T06:01:00.587 回答
0

另一种替代方法,计算两条皮带所用时间的 LCM,这将是碰撞时间。

    public static int timeLapsed(int perimeter1, int speed1, int perimeter2, int speed2) {
    int timeForTrolley1 = perimeter1/speed1,timeForTrolley2 = perimeter2/speed2;
    int greater,smaller;
    int result = 0;
    if(timeForTrolley1 >  timeForTrolley2)  {
        greater = timeForTrolley1;
        smaller = timeForTrolley2;
    }   else    {
        greater = timeForTrolley2;
        smaller = timeForTrolley1;
    }
    for(int i=1;i<=smaller;i++)     {
        if(((greater*i)%smaller)==0)    {
            result = greater*i;
            break;
        }
    }

    return result-10;
}
于 2018-05-02T06:58:17.273 回答