奇数之和直到达到Javascript中的限制

新手上路,请多包涵

当我在解决“将奇数从 1 加到 20”的问题时,我编写了以下代码:

 var i, sum=0;
for (i=2; i<=20; i*2){
  sum=sum+i;
}
document.write(sum);

当我通过浏览器启动它时,它不起作用。但是,当我将 i*2 固定为 i+=2 时,它起作用了。

我错过了什么?我不能在 For 循环中使用 *(multiplier) 吗?

原文由 Caleb Hyun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 199
2 个回答

如果需要将1到20之间的奇数相加,则需要 i+=2 作为for的第三个参数,需要将变量初始化为1才能得到正确的结果:

 var sum = 0;
for (var i = 1; i <= 20; i += 2) {
    sum += i;
}

当你有

我 += 2

2 添加到 i 结果存储到 i 。当你试过

var i, sum=0;
for (i=2; i<=20; i*2){
  sum=sum+i;
}

i*2 计算的值是 i 的两倍,但它不会改变 i 的值,所以这将“工作”

 var i, sum=0;
for (i=2; i<=20; i*=2){
  sum=sum+i;
}

在哪里

i *= 2

不仅计算的值是 i 的两倍,而且还将结果存储到 i 中。但是,即使这会运行,结果也不正确,因为您使用了错误的公式。

此外,您可以在不使用 for 的情况下计算结果:

1 + 2 + … + n = n * (n + 1) / 2

假设 n 是对:并且因为我们知道我们“丢失”了一半的数字并且所有的对数字都比之前的受损数字大了 1,我们可以减去序列的一半

n * (n + 1) / 2 - n / 2 = (n * (n + 1) - n) / 2 = (n * (n + 1 - 1)) / 2 = n * n / 2

现在我们正好有了所需的双倍值,所以最终的公式是:

 sum = n * n / 4;

让我们把它变成 function

 function getOddSumUpTo(limit) {
    if (limit % 2) limit ++;
    return limit * limit / 4;
}

接着:

 var sum = getOddSumUpTo(20);

请注意,如果它是奇数,我们会增加限制。

原文由 Lajos Arpad 发布,翻译遵循 CC BY-SA 4.0 许可协议

问题是您没有在 i 中更新 loop 的值。

我想添加从 1 到 20 的奇数

然后,您需要将 i 的初始值更改为 1

 var i, sum = 0;
for (i = 1; i <= 20; i += 2){
  sum += i;
}
document.write(sum);

此外,您还可以使用公式求出 odd numbers from 1 to 20 的总和。

 n = 20;
console.log(n % 2 == 0 ? (n * n)/ 4 : ((n + 1) * (n + 1))/4);

原文由 Mihai Alexandru-Ionut 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏