任务是猜测3个数字:x,y和z,只知道它们中的每一个的总和。
我怀疑多种情况可能无效。
在这个测试用例中,答案是显而易见的:每个数字都是5,但由于某种原因,代码不起作用。一旦任何变量的总和为10,它似乎认为任务已经解决。
var bruteforce = function(){
var i = 0;
var x = 0; //tie
var y = 0; //jacket
var z = 0; //shirt
while (x+y !== 10 && z+y !== 10 && z+x !== 10){
var x = 1 + Math.floor(Math.random() * 10);
var y = 1 + Math.floor(Math.random() * 10);
var z = 1 + Math.floor(Math.random() * 10);
i++;
}
console.log('Solved at ' + i + ' attempts.');
console.log('x = ' + x);
console.log('y = ' + y);
console.log('z = ' + z);
};
bruteforce();
答案 0 :(得分:4)
您应该在条件中使用OR(||
):
while (x+y !== 10 || z+y !== 10 || z+x !== 10){
var x = 1 + Math.floor(Math.random() * 10);
var y = 1 + Math.floor(Math.random() * 10);
var z = 1 + Math.floor(Math.random() * 10);
i++;
}
由于你的条件是负面的,你想继续前进,如果其中任何一个失败。 使用AND时,如果其中任何一个成功,则停止。当使用OR时,一旦它们都成功就停止。
此外,我认为您不应该在循环中使用var
:
while (x+y !== 10 || z+y !== 10 || z+x !== 10){
x = 1 + Math.floor(Math.random() * 10);
y = 1 + Math.floor(Math.random() * 10);
z = 1 + Math.floor(Math.random() * 10);
i++;
}
记录:81次尝试:)
答案 1 :(得分:0)
一旦一个条件满足循环结束,所以它的行为与预期一致。使用|| while语句中的(OR)条件。