Javascript 用暴力折磨你。。。while或while循环

Javascript 用暴力折磨你。。。while或while循环,javascript,while-loop,Javascript,While Loop,任务是猜测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

任务是猜测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();
Fiddle在这里:

您应该在您的情况下使用ORs(
|
):

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++;
}
由于你的情况是消极的,如果其中任何一个失败,你都想继续下去。 使用时,如果其中任何一个成功,则停止。当使用或停止时,一旦它们全部成功

此外,我认为您不应该在循环中使用
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次尝试:)

一旦一个条件满足循环结束,它就会按预期运行。在while语句中使用| |(或)条件。

为什么使用暴力?用数学<代码>x=(求和xy+求和xz-求和yz)/2@Oriol Hm。。。如果x+y=205;x+z=130;y+z=225,则建议的解决方案给出x为110/2=55。“蛮力”建议x为40。它只需要1450万次尝试,不管怎样都很有趣:)那么你的暴力是错误的。唯一的解决方案是
x=55
y=150
z=75
,请参阅。如果
x=40
,则意味着
y=205-40=165
z=130-40=90
,但是
165+90=255
而不是
225
?如果x=55,y=130,那么x+y=185,它不满足x+y=205的起始条件。Bruteforce给出了答案:x=40,y=165,z=90。对,我错了,y+z=255:)