在Javascript中达到限制之前的奇数总和
当我回答一个题为“将奇数从1添加到20”时,我将其编码为:在Javascript中达到限制之前的奇数总和,javascript,loops,for-loop,Javascript,Loops,For Loop,当我回答一个题为“将奇数从1添加到20”时,我将其编码为: var i,和=0; for(i=2;i问题在于您没有更新for循环中的i的值 我想把1到20之间的奇数相加 然后需要将i的初始值更改为1 var i,和=0; 对于(i=1;i你可以,你只需要按照你写的关于求和的内容来做 您在那里使用了i+=2,而不是i+2 同样的方法就是将i*2更改为i*=2 下面是一个工作示例 var i,和=0; 对于(i=2;i您可以在循环头中使用任何表达式,即使对于(;;)这是一个有效的for循环语句,
var i,和=0;
for(i=2;i问题在于您没有更新for循环中的i
的值
我想把1到20之间的奇数相加
然后需要将i
的初始值更改为1
var i,和=0;
对于(i=1;i你可以,你只需要按照你写的关于求和的内容来做
您在那里使用了i+=2
,而不是i+2
同样的方法就是将i*2
更改为i*=2
下面是一个工作示例
var i,和=0;
对于(i=2;i您可以在循环头中使用任何表达式,即使对于(;;)
这是一个有效的for循环语句,它只会永远运行(相当于while(true)
)
问题是您没有更新中的i
计数器(i=2;i您正在查找的是:
let sum=0;
for(var i=2;i如果需要将奇数从1添加到20,则需要将i+=2
作为for的第三个参数,并需要将变量初始化为1以获得正确的结果:
var sum = 0;
for (var i = 1; i <= 20; i += 2) {
sum += i;
}
i*2
计算的值是i
的两倍,但它不会改变i
的值,因此这将“起作用”:
不仅计算两倍于i
的值,而且还将结果存储到i
中。但是,即使运行此操作,结果也不会正确,因为您使用了错误的公式
此外,您还可以计算结果,而无需对
使用:
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 getOddSumUpTo(limit) {
if (limit % 2) limit ++;
return limit * limit / 4;
}
然后:
var sum = getOddSumUpTo(20);
请注意,如果是奇数,我们会增加限制。为什么不尝试在循环中使用console.log(“i is:,i)
?每次将i乘以2都不是问题,但您没有得到预期的输出。下一个奇数是oddNumber+2
而不是oddNumber*2
为什么您甚至尝试使用*
?您已经说过了“将奇数从1添加到20”表示您希望将2添加到i
,而不是每次将i
乘以2
。“将奇数从1添加到20”通过在2
处启动i
,您将错过1
(i=2;我想如果我只是在循环中写‘i’,它会随着数字的增加而不断更新。那么,我能这样理解吗?:每次在for循环中,我都需要为它们中的每一个给出一个值。@CalebHyun,在for循环中,你必须指定计数器
,这就引出了我们需要更新i
变量。但这个循环仍然添加偶数而不是奇数:)@KrzysztofJaniszewski,对不起,我的错误。更新了答案。谢谢Krzysztof,对不起,问题是合并偶数,我写错了。我想知道循环中的-为什么(i=1;我很高兴你的回答很好。我也发现了类似的公式用于这种练习。@MihaiAlexandru Ionut Am vazut-o deja,我已经投了更高的票。哇,我完全明白了。谢谢你,Lajos!@CalebHyun,不客气。你可以接受答案。我认为我和Ionut的答案都是正确和有用的。@LajosArpad我不认为你的答案是正确的swer是可以接受的。为什么getOddSumUpTo(21)的分数是100.25?奇数之和怎么能得到0.25的分数?
sum = n * n / 4;
function getOddSumUpTo(limit) {
if (limit % 2) limit ++;
return limit * limit / 4;
}
var sum = getOddSumUpTo(20);