簡體   English   中英

從n到m的偶數和,無論是否n <m or n> 米

[英]Sum of even numbers from n to m regardless if n<m or n>m

我正在嘗試計算從nm的數字總和,無論n>m還是n<m 我只設法讓它在n<m 有人可以幫我嗎?

       function SumEvenN()
{
    var n = getFirstNumber();
    var m = getSecondNumber();

    var s = 0;

    if (n<m)
    {
        min = n;
        max = m;
    }
    else if (m<n)
    {
        min = m;
        max = n;
    }

    if (n>m)
    {
        [n, m] = [m, n]
    }
    for (var i = 2; i<=m; i++)
    {
        if (i % 2 == 0)
        {
            s += i;
        }
    }
    alert(s);

}


function getFirstNumber()
{
    var a = document.getElementById("first-number");    
    return parseInt(a.value);
}

function getSecondNumber()
{
    var b = document.getElementById("second-number");   
    return parseInt(b.value);
}

嘗試

function SumEvenN(n,m) {
  if(n>m) [n, m] = [m, n];  // swap variables if n>m
  n=n%2 ? n+1 : n;          // if n is odd add 1 to it
  m=m%2 ? m-1 : m;          // if m is odd add -1 to it
  let t=(m-n+2)/2;          // number of even elements between n and m
  return t*(n+m)/2;         // use formula of arithmetic progression sum
}

 function SumEvenN(n,m) { if(n>m) [n, m] = [m, n]; // swap variables if n>m n=n%2 ? n+1 : n; // if n is odd add 1 to it m=m%2 ? m-1 : m; // if m is odd add -1 to it let t=(m-n+2)/2; // number of even elements between n and m return t*(n+m)/2; // use foruma of arithmetic progression sum } function calc() { console.log(SumEvenN(+first.value, +second.value) ); } 
 <input id="first" type="number" value="9"/> <input id="second" type="number" value="16"/> <button id="btn" onclick="calc()">Calc</button> 

您可以使用Math.minMath.max來獲取最小值和最大值。

然后,使用第一個偶數從最小值到最大值進行單次循環,並迭代直到該值大於最大值。

將值加到總和。

 function sumEven(a, b) { var min = Math.min(a, b), max = Math.max(a, b), value, sum = 0; for (value = min + min % 2; value <= max; value += 2) { sum += value; } return sum; } console.log(sumEven(1, 5)); // 6 console.log(sumEven(5, 1)); // 6 console.log(sumEven(2, 8)); // 20 console.log(sumEven(8, 2)); // 20 

不管這可能是一個簡單得多的數學方程式,您的問題是這一行:

for (var i = 2; i<=m; i++)

而是使用上面找到的最小值和最大值:

for (var i = min; i <= max; i++)

 const getFirstNumber = () => 9; const getSecondNumber = () => 4; function SumEvenN() { var n = getFirstNumber(); var m = getSecondNumber(); var s = 0; if (n<m) { min = n; max = m; } else if (m<n) { min = m; max = n; } for (var i = min; i <= max; i++) { if (i % 2 == 0) { s += i; } } alert(s); } SumEvenN(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM