查找for循环中变量的迭代总和

时间:2013-12-11 23:25:44

标签: javascript for-loop

for (i = 0; i <= 1000; i++) {
    if ( i % 3 === 0){
        console.log(i);
    }
    if ( i % 5 === 0){
        console.log(i);
    }

}

我想将i的每个输出添加到一起。 i.e. 0+0+3+5+6+9+10...+1000

是否有算法执行此操作,或者我只是开始将这些数字中的每一个一起添加?

3 个答案:

答案 0 :(得分:7)

从1到 n 的数字之和为

n * (n + 1) / 2

从1到1000的可被3整除的数字之和与从一到1000 / 3的数字之和相乘,再乘以3.同样,数字的总和从1开始可以被5整除的1000与从1到1000 / 5的数字相同,乘以5。

我打赌你正在处理的问题是要排除可被15整除的数字:)

编辑 - 为什么这样做?那么,考虑从1到 n 的数字的简单情况;比如,1比100。

1, 2, 3, 4, 5, ... 97, 98, 99, 100

现在,考虑相同的数字列表,但是倒退:

100, 99, 98, 97, ... 4, 3, 2, 1

请注意,当我们从这两个列表中添加对时,我们总是得到101:

100 + 1 is 101
99 + 2 is 101
98 + 3 is 101
...
4 + 97 is 101
3 + 98 is 101
2 + 99 is 101
1 + 100 is 101

所以有100个总和都是一样的,那就是101.如果我们做乘法并除以2,我们就得到了答案:)

现在,可以被3或5整除的数字总和怎么样?好吧,如果你考虑一下,这些数字是什么样的?

3, 6, 9, 12, ... 993, 996, 999

嗯......看起来很像

3 * (1, 2, 3, 4, ... 331, 332, 333)

所以数字1到333的总和是333 * 334 / 2,如果我们将它乘以3,我们得到1到1000之间可以被3整除的数字之和。相同的是5.如果我们想要删除3和5可以整除的数字的总和,我们计算从1到1000 / 15的数字之和以及从结果中减去

哦,还有一件事。如果我们谈论的是整数的总和,我们怎么知道我们除以2的那一步不会给我们留下一小部分?嗯,公式是n * (n + 1) / 2,请记住。如果n是奇数,则n + 1是偶数。因此,乘法将总是涉及一个偶数,所以除以2将永远不会给我们留下一小部分!

答案 1 :(得分:2)

只需在循环外创建一个变量以保持运行总计:

int sum = 0;
for (i = 0; i <= 1000; i++) {
    if ( i % 3 === 0){
        sum += i; // or sum = sum + i
    }
    if ( i % 5 === 0){
        sum += i; // or sum = sum + i
    }
}

console.log(sum);

答案 2 :(得分:1)

如果你想避免在你的总和中计算两次15的倍数:

int sum = 0;
for (i = 0; i <= 1000; i++) {
    if ( i % 3 === 0 ||  i % 5 === 0){
        sum += i; // or sum = sum + i
    }
}