先生。 Dis和Aster先生是Fiasco Iron Works的机械工程师。 他们被指派设计自动手推车的道路 冶炼厂的铁矿石。他们应该做 两个用于自动手推车的圆形道路。但是,错误的 迪斯先生和阿斯特先生使圆形道路与每个道路相切 其他(即两个圆形路径在某一点上相互接触) 每天早上8点,手推车都从相切点开始 并在各自的轨道中顺时针移动。这很明显 在某些时候,手推车会在哪里碰撞 他们开始了。在绝望的尝试,以节省手推车和 对工厂运营造成的损害,总工程师 工厂要求你写一个听起来像的程序 在碰撞前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操作然后按速度划分。但是对于某些案例来说这是失败的。请帮助我理解原因。
答案 0 :(得分: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;
}
答案 1 :(得分: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;
}