如果两辆车在任何时候相遇则打印是否其他没有?

时间:2018-05-17 11:26:04

标签: java

这里x1和v1是car1的初始位置和速度,以及car2的x2和v2。我需要找出这两辆车是否在任何地方相遇。它让我显示错误" No"总是。有什么建议吗?

    if (v1 > v2) {
        while ((x1 + (v1 * i)) > (x2 + (v2 * i))) {
            if ((x1 + (v1 * i)) == (x2 + (v2 * i))) {
                prime = true;
                break;
            }
            System.out.println(""+i);
            i++;
        }
        if (prime == true) {
            s = "Yes";
        } else {
            s = "No";
        }
    }
    if (v2 > v1) {
        while ((x2 + (v2 * i)) > (x1 + (v1 * i))) {
            if ((x1 + (v1 * i)) == (x2 + (v2 * i))) {
                prime = true;
                break;
            }
            System.out.println(""+i);
            i++;
        }
        if (prime == true) {
            s = "Yes";
        } else {
            s = "No";
        }
    }
    if (v1 == v2) {
        if (x1 == x2) {
            s = "Yes";
        } else s = "No";
    }
    System.out.println(""+s);

}

}

3 个答案:

答案 0 :(得分:4)

这是一个数学问题而不是编程问题。基本上你不需要任何循环和东西来回答它。我假设(因为没有其他含义)两辆车在速度为V的同一X方向上,其中X和V都是正数。

所以基本上你的逻辑可以是 - >如果速度较快的汽车落后于较慢的汽车,他们最终会遇到。否则他们不会。在这种情况下,您将不需要任何循环。以下示例中的最后一项检查是它们是否已在同一位置。

   if((x1<x2 && v1>v2) || (x1>x2 && v1<v2) || (x1==x2)) { 
        System.out.println("Yes");
    } else { 
       System.out.println("No");
    }

如果V可以是负数(例如显示向后移动,这有点奇怪,因为速度不能为负),那么它仍然是相同的。只有当你想知道它们遇到的向量X上的点时,你才可以进行循环。但是通过一些计算,您仍然可以在没有循环的情况下进例如:

int vDiff=Math.abs(v1-v2);      
int xDiff=Math.abs(x1-x2);      
System.out.println("Meeting point: "+(((double)xDiff)/((double)vDiff)*v1+x1));

答案 1 :(得分:0)

我认为你的问题很复杂,你的迭代你基本上找到了汽车相遇的时间步,如果他们相遇的话。

当从一个方向考虑时,这两辆车实际上只有五种可能性:

1)轿厢1位于轿厢2的前方,并且比轿厢2的移动速度快于或高于轿厢2 =>汽车永远不会见面

2)汽车1在汽车2后面,并且比汽车2移动得更快=&gt;汽车见面

3)轿厢1位于轿厢2的前方,并且比轿厢2的移动慢=>汽车见面

4)轿厢1在轿厢2后面,并且比轿厢2的移动速度慢或者速度相同=>汽车永远不会见面

5)汽车已经相遇了。

在代码中,这可能如下所示:

boolean carsMeet(x1,v1,x2,v2){
    boolean output = false;

    if(x1 > x2){
        // Conditions 1 and 3. Car 1 is ahead of car 2
        if (v2 > v1){
            // Condition 3
            output = true;
        }

    } else if (x1 < x2){
        // Conditions 2 and 4. Car 2 is ahead of car 1
        if (v1 > v2){
            // Condition 2
            output = true;
        }

    } else {
        // Condition 5. Car 1 has already met car 2
        output = true;
    }

return output;

}

我没有运行此代码来检查它是否存在语法错误,但总的来说,这是我建议解决问题的方法,而不是您当前的方法。

答案 2 :(得分:0)

s = "No";
if (x1 == x2) {
   s = "Yes";
} else if (v1 == v2) {
   s = "No";
} else if ((x2-x1)/(v1-v2) > 0) {
   s = "Yes";
}