Мини-Макс Сумма Javascript - PullRequest
0 голосов
/ 22 января 2020

Учитывая пять натуральных чисел, найдите минимальное и максимальное значения, которые можно вычислить, суммируя ровно четыре из пяти целых чисел. Затем выведите соответствующие минимальное и максимальное значения в виде одной строки из двух разделенных пробелом длинных целых чисел. Например, пусть 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)

Ответы [ 2 ]

1 голос
/ 22 января 2020

## Добавлены две функции для проверки 4 мин. / Макс. Значений обр. равны или нет, тогда, если все 4 значения равны, возвращается значение true, в противном случае - значение false. Чтобы получить минимальное / максимальное значение, я использовал метод Math. ##

    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.")
    }
1 голос
/ 22 января 2020

Я бы переписал функцию в нечто вроде этого

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.

Если все из целых чисел в массиве равно, наименьшее и наибольшее значение также будет равно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...