我在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
}
答案 0 :(得分:3)
这部分代码导致它永远不会结束:
if (d == d.toFixed(0)){} else {}
如果公式的结果是整数,则向e
添加1,但由于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());
答案 1 :(得分:0)
一旦它到达e++
块就会卡住,永远不会增加a
,b
或c
。
function mmd()
{
var keepGoing = true;
var a = 1, b = 1, c = 1, d, e = 0;
while(keepGoing)
{
// calculate d
d = Math.sqrt(Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2));
// check if it is a whole number
if(d == d.toFixed(0)) e++;
// if we're done then stop
if(a == 9 && b == 9 && c == 9){ keepGoing = false; }
// if c is less than 9 then increase it
else if(c < 9){ c++; }
// if c is 9 and b is less than 9 then set c back to 1 and increase b
else if(b < 9){ c = 1; b++; }
// if c is 9 and b is 9 then set both back to 1 and increase a
else if(a < 9){ c = b = 1; a++; }
}
return e;
}