freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../sum-all-numbers-in-a-range/index.md

6.4 KiB
Raw Blame History

title localeTitle
Sum All Numbers in a Range 求和范围中的所有数字

:triangular_flag_on_post:如果卡住,请记得使用**Read-Search-Ask** 。尝试配对程序:busts_in_silhouette:并编写自己的代码:pencil:

:checkered_flag:问题说明:

您需要创建一个程序,该程序将采用两个不一定排序的数字的数组,然后不仅添加这些数字,而且还添加其间的任何数字。例如,[3,1]将与1+2+3 ,而不仅仅是3+1

:speech_balloon:提示1

使用Math.max()查找两个数字的最大值。

现在尝试解决问题

:speech_balloon:提示2

使用Math.min()查找两个数字的最小值。

现在尝试解决问题

:speech_balloon:提示3

请记住,您必须在中间添加所有数字,这样才能获得这些数字。

现在尝试解决问题

扰流警报!

警告牌

提前解决!

:beginner:基本代码解决方案

function sumAll(arr) { 
    var max = Math.max(arr[0], arr[1]); 
    var min = Math.min(arr[0], arr[1]); 
    var temp = 0; 
    for (var i=min; i <= max; i++){ 
        temp += i; 
    } 
  return(temp); 
 } 
 
 sumAll([1, 4]); 

:rocket: 运行代码

代码说明:

  • 首先创建一个变量来存储两个之间的最大数量。
  • 与最小数字相同。
  • 我们创建一个临时变量来添加数字。

由于数字可能并不总是有序,因此使用max()min()将有助于组织。

相关链接

:sunflower:中级代码解决方案:

function sumAll(arr) { 
  // Buckle up everything to one! 
 
  // Using ES6 arrow function (one-liner) 
  var sortedArr = arr.sort((a,b) => ab); 
  var firstNum = arr[0]; 
  var lastNum = arr[1]; 
  // Using Arithmetic Progression summing formula 
 
  var sum = (lastNum - firstNum + 1) * (firstNum + lastNum) / 2; 
  return sum; 
 } 

:rocket: 运行代码

代码说明:

  • 首先,我们创建一个名为sortedArr的变量,该变量将其从最低值到最高值进行排序。
  • firstNum等于第一个数字, lastNum等于第二个数字。
  • 接下来使用Arithmetic Progression求和公式我们sum (lastNum - firstNum + 1) * (firstNum + lastNum) / 2
  • 最后,我们返回sum

line var sortedArr = arr.sort((a,b) => ab);可能会让你更加困惑的是什么。这与创建一个为sort()返回ab的函数相同, sort()是从最小到最大排序数字的标准方法。相反,使用箭头或胖箭头功能,我们能够在一行中完成所有这些操作,从而允许我们减少写入。

相关链接

:rotating_light:高级代码解决方案

function sumAll(arr) { 
    var sum = 0; 
    for (var i = Math.min(...arr); i <= Math.max(...arr); i++){ 
        sum += i; 
    } 
  return sum; 
 } 
 
 sumAll([1, 4]); 

:rocket: 运行代码

代码说明:

  • 创建变量sum以存储元素的总和。
  • 从给定数组的min元素开始迭代循环并在到达max元素时停止。
  • 使用扩展运算符(... arr允许将实际数组传递给函数而不是逐个元素。

相关链接

:clipboard:捐款说明:

  • :warning: 请勿添加与任何现有解决方案类似的解决方案。如果您认为它**相似但更好** ,那么尝试合并(或替换)现有的类似解决方案。
  • 添加解决方案的说明。
  • 将解决方案分为以下类别之一 - 基本 中级高级:traffic_light:
  • 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 :warning: 不要 删除任何现有的用户名

看到:point_right: Wiki Challenge Solution Template供参考。