我刚刚解决了一个黑客等级问题。问题是: https://www.hackerrank.com/challenges/kangaroo/problem
以下解决方案已通过所有30项测试
function kangaroo(x1, v1, x2, v2) {
var returnVal = "NO";
if (x2 > x1 && v2 > v1) {
returnVal = "NO";
} else if ((x1 - x2) % (v2 - v1) === 0) {
returnVal = "YES";
}
return returnVal;
}
但在我改变代码之后,它没有通过2次测试。
function kangaroo(x1, v1, x2, v2) {
var returnVal = "NO";
if ((x1 - x2) % (v2 - v1) === 0) {
returnVal = "YES";
}
return returnVal;
}
returnVal的默认值是" NO"。所以,我认为首先,如果声明不是必要的。那么,为什么第二个代码没有通过两次测试?
答案 0 :(得分:2)
想象一下
kangoroo(1,1,2,2)
因此,第一个代码将返回否,而第二个代码将返回是。您可以将第一个条件实现到第二个条件:
function kangaroo(x1, v1, x2, v2){
if ((x1 - x2) % (v2 - v1) === 0 && !(x2 > x1 && v2 > v1)) {
return "YES";
}
return " No";
}
答案 1 :(得分:0)
第一个代码块中的第二个条件是 else if。它只会在第一个if条件没有通过的情况下运行。
您可以输入与if条件和else if条件匹配的输入。这将导致第一种情况下输出为NO(if
匹配且else if
永远不会运行),但修改后的代码中的YES(前else if
匹配)。
答案 2 :(得分:0)
尝试一下(用Java编写)
x1:袋鼠1的初始位置 &x2:袋鼠2的初始位置
如果给出x2> x1
static String kangaroo(int x1, int v1, int x2, int v2) {
int i;
for(i=0; x1<x2; i++){
x1 = x1 + v1;
x2 = x2 + v2;
if(x1 == x2){
return "YES";
}
}
return "NO";
}
以下解决方案涵盖了x1> x2或x1 == x2或x1 static String kangaroo(int x1, int v1, int x2, int v2) {
int i, flag = 0;
if(x1 > x2){
for(i=0; x1>x2; i++){
x1 = x1 + v1;
x2 = x2 + v2;
if(x1 == x2){
return "YES";
}
}
}else if(x1 < x2){
for(i=0; x1<x2; i++){
x1 = x1 + v1;
x2 = x2 + v2;
if(x1 == x2){
return "YES";
}
}
}else
return "YES";
return "NO";
}
答案 3 :(得分:0)
最简单的解决方案是
if (v1 <= v2 && x2 > x1) {
return "NO";
} else {
return (x2 - x1) % (v2 - v1) == 0 ? "YES" : "NO";
}