为什么这个函数只返回0和1?Project Euler JavaScript

为什么这个函数只返回0和1?Project Euler JavaScript,javascript,Javascript,此函数用于project Euler#45。我想找到的是,如果我用一个整数,一个可以工作的函数,如果我用一个变量来表示那个整数,它就不能工作。换句话说,该函数的值(i)仅返回0和1 function tri(n) { return (n*(n+1))/2; } function pent(n) { return (n*(3*n-1))/2; } function hex(n) { return (n*(2*n-1)); } for (i=0;i<10000;i++

此函数用于project Euler#45。我想找到的是,如果我用一个整数,一个可以工作的函数,如果我用一个变量来表示那个整数,它就不能工作。换句话说,该函数的值(i)仅返回0和1

function tri(n) {
    return (n*(n+1))/2;

}

function pent(n) {
return (n*(3*n-1))/2;
}

function hex(n) {
    return (n*(2*n-1));
}


for (i=0;i<10000;i++) {
    if (tri(i) === pent(i) && pent(i) === hex(i)) {
        console.log(tri(i));
    }
}
功能三(n){
返回(n*(n+1))/2;
}
函数pent(n){
返回(n*(3*n-1))/2;
}
函数十六进制(n){
返回(n*(2*n-1));
}

对于(i=0;i您只记录了0和1,因为这是这三个函数的结果都相同(0或1)的唯一数字。对于所有其他数字,这三个函数返回不同的值

对于ProjectEuler问题,你不应该找到i的值,每个函数的值都是相同的。你应该找到出现在所有三个序列中的值。它们不必出现在每个序列中的同一点上

解决这个问题的一种方法是想象从一开始就将T、p和H数字的列表向上移动。每个列表中的第一个值是1。现在因为它们是相同的,所以为每个列表生成另一个数字。现在值是3、5和6。从这里开始,您可以为列表生成一个新值,其当前值是所有数字中最小的(如果有平局,可以任意选择一张名单。)这样,您可以一次向上移动每个列表中的一个新值。有时,您可能会生成两个T值,而不生成另一个P或H值,但这没关系。最终,您会遇到每个列表中的最大值相同的情况,即使列表的长度不同


Euler项目的挑战性和扩展性在于自己思考解决问题的方法。我还要告诉大家,许多问题都是经典的数论问题,有些问题有着令人惊讶的解决方案。如果你没有学习数论,你不应该为没有弄清楚这些问题而感到难过;首先得到解决方案的人我们是像欧拉和高斯这样的人。

谢谢,但是当我使用不同的变量,即I,j,k时,我仍然遇到麻烦。有没有比使用三个for循环更好的方法呢?例如for(j=0…);for(I=0…);for(k=0…)?这是我在JS上遇到的大多数问题的根源。再次感谢。这与使用单独的变量无关。这与你处理问题的基本方法有关。假设你在三张长纸上写了所有T、P和H数字的列表。你会如何找到出现在这三个列表中的数字?你不会是H必须找到哪个数字(变量?)给它输出?如果我回答不好,很抱歉,我唯一做的JS是codeacademy。不,因为正如问题所解释的,数字在列表中不在同一点上。例如数字40755:它是
tri(285)
pent(165)
,和
hex(143)
。那么我不知道在没有for循环或while循环的情况下如何比较它们。