我用 JavaScript 编写了一个函数,它检查 1 到 9 之间的三位数字的所有组合,并给出符合此模式的组合数 √(x^2 + y^2 + z^2) = 一个自然数(像 24 或 34 但不是 2.54 的整数)
√ = 平方根,^2 = 2 的幂,
我的问题是,每当我运行该函数时,计算机就会卡住并且该函数永远不会结束,因此它不会返回答案。 如果有人能告诉我它有什么问题,我将不胜感激 (我在 chrome 浏览器控制台上运行我的程序)
function mmd() {
var chk = false;
var a = 1;
var b = 1;
var c = 1;
var d = 1;
var e = 0;
while(chk != true) {
d = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2)+Math.pow(c, 2));
if( d == d.toFixed(0)) {
e++;
}
else {
if((b == 9) && (a == 9) && (c == 9)) {chk = true;}
else if((a == 9) && (b == 9)) {c++;}
else if(b == 9) {b = 1; a++;}
else if(c == 9) {c = 1; b++;}
else if(c < 9) {c++;}
}
}
return e
}
最佳答案
这部分代码导致它永远不会结束:
if (d == d.toFixed(0)){} else {}
如果公式的结果是整数,则将 1 加到 e
,但不会增加其他变量,因为 else
。它一直在做 e++
。所以你需要删除那个else
。
我也冒昧地删除了 chk
变量,而是使用了 while(true)
,它将以最终结果的返回结束:
function mmd() {
var a = 1, b = 1, c = 1, d, e = 0;
while(true) {
d = Math.sqrt(Math.pow(a, 2)+Math.pow(b, 2)+Math.pow(c, 2));
if( d == parseInt(d, 10)) {
e++;
}
if((b == 9) && (a == 9) && (c == 9)) {return e;}
else if((a == 9) && (b == 9)) {c++;}
else if(b == 9) {b = 1; a++;}
else if(c == 9) {c = 1; b++;}
else {c++;}
}
}
alert(mmd());
关于javascript - While 循环在 JavaScript 中永远运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36924845/