Javascript 用暴力折磨你。。。while或while循环
任务是猜测3个数字:x、y和z,只知道每两个数字的和 我怀疑多个条件可能不起作用 在这个测试用例中,答案是显而易见的:每个数字都是5,但由于某种原因,代码不起作用。当任何变量之和为10时,似乎认为任务已解决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
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:)