【问题标题】:Mini-Max Sum Javascript最小最大和 Javascript
【发布时间】:2020-01-22 17:00:39
【问题描述】:

给定五个正整数,找出可以通过将五个整数中的四个恰好相加来计算的最小值和最大值。然后将各自的最小值和最大值打印为单行的两个空格分隔的长整数。 例如让 arr = [1,3,5,7,9]。我们的最小总和是 16 ,我们的最大总和是 24 。我们将打印 16,24

这是我的代码。但是如果 arr 中的所有元素都相等怎么办? arr = [5,5,5,5] 当数组中的所有元素都相等时,我该如何解决?

let arr = [1,3,5,7,9]
let largest = arr[0];
let smallest = arr[0];
let largestSum = 0;
let smallestSum = 0;
for(let i = 0; i < arr.length; i ++){
  if(arr[i] > largest){
    largest = arr[i];
  }
  if (arr[i] < smallest){
    smallest = arr[i];
  }
}
for(let j = 0; j < arr.length; j ++){
  if(arr[j] < largest){
    smallestSum = smallestSum + arr[j];
  }
  if(arr[j] > smallest){
    largestSum = largestSum + arr[j];
  }
}
console.log(smallestSum + " " + largestSum)

【问题讨论】:

    标签: javascript string integer operators multiplication


    【解决方案1】:

    我会把函数改写成这样的

    let arr = [1,4,5,2,7];
    
    arr.sort();
    let largest = arr.slice(1).reduce((a, b) => a + b, 0);
    arr.reverse();
    let smallest = arr.slice(1).reduce((a, b) => a + b, 0);
    
    console.log(largest+ " " + smallest);
    

    首先,我们对数组进行排序。
    然后,为了找到可能的最大总和,我们切掉第一个和最小的元素,然后将其余元素相加。
    结果存储在变量largest中。

    然后,为了找到可能的最小总和,我们再次这样做。 这次唯一的区别是我们反转数组,以便我们切掉的值将是最大的。
    然后将可能的最小总和存储在变量smallest中。

    如果数组中的所有整数都相等,则最小值和最大值也将相等。

    【讨论】:

      【解决方案2】:

      ## 添加了两个函数来检查 arr 的 4 个最小/最大值是否相等,如果所有 4 个值都相等则返回 true,否则返回 false。为了获得最小/最大值,我使用了数学方法。 ##

          let arr = [1, 3, 5, 7, 9]
          let largest = Math.max(...arr);
          let smallest = Math.min(...arr);
          let largestSumArray = arr.filter(val => val !== smallest);
          let smallestSumArray = arr.filter(val => val !== largest);
          function checkNotEqualValLarge(arrVal) {
              return arrVal == largest;
          }
          largeIsNotEqul = largestSumArray.every(checkNotEqualValLarge);
      
          function checkNotEqualValSml(arrVal) {
              return arrVal == smallest;
          }
          smallIsNotEqul = smallestSumArray.every(checkNotEqualValSml);
      
          if (!largeIsNotEqul && !smallIsNotEqul) {
              let largestSum = 0;
              let smallestSum = 0;
              for (let j = 0; j < arr.length; j++) {
                  if (arr[j] < largest) {
                      smallestSum = smallestSum + arr[j];
                  }
                  if (arr[j] > smallest) {
                      largestSum = largestSum + arr[j];
                  }
              }
              console.log(smallestSum + " " + largestSum)
          }
          else {
              alert("there are four value's are same.")
          }
      

      【讨论】:

        猜你喜欢
        • 2011-12-22
        • 1970-01-01
        • 2015-04-08
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多