Добрый вечер , никак не могу понять как решить такую задачу. Нужно найти максимальное значения массива разделив элементы на пары и одиночные. Пример: в массиве [0,1,2,3,4,5] будут пары (4,5) 4*5 = 20 и (2,3) 2*3 = 6, остаются два не парных элемента 1 и 0 , так как при умножении 1*0 или 0*1 получим ноль . Следовательно получим максимальное значения массива : (4*5)+(2*3)+1+0 = 27.
Так же в массиве могут быть и отрицательные числа [-1,0,1]. Получим максимальное значения массива : (-1*0)+1 = 1.
И вот еще пример [1,1] . Найдем максимальное значение массива : 1+1 = 2 . Нет смысла умножать так как получим 1.
Заключение : Кто примерно понимает как реализовать такую функцию на JS? Учитывая что элементы массива могут быть разными.
Заранее спасибо!
Дополню описанием из источника:
for the list [0,1,2,3,4,5] the pairs (4,5) and (2,3) are formed and 0 and 1 are single elements. The max. sum is 27 - (20+6+0+1).
for the list [-1,0,1] the pairs (-1,0) is formed and 1 is a single element. The max. sum is 1.
for the list [1,1] no pairs are formed only two single elements. The max. sum is 2.
let array = new Array (0,1,2,3,4,5,6,7);
let arrayFirst = new Array();
let arraySecond = new Array();
let sum = 0;
for (i = 0; i < array.length; i += 1) {
if (i % 2 == 0) {
arrayFirst.push(array[i]);
} else {
arraySecond.push(array[i]);
}
}
for(a = 0; a < arrayFirst.length; a += 1) {
if (arrayFirs[a] == 1 && arraySecond[a] == 1) {
sum += 2;
continue;
}
sum += arrayFirst[a] * arraySecond[a];
}
Короче, такая лабуда... надо еще проверить, что элементов четное кол-во)
з.ы. возможно есть методы какие, я js почти не учил, поэтому многого не знаю...
Вазген Алексанян, 4*5 это 20 а 20 это 2 и 0, 0 это ноль а 2 это 1+1. Еденица одна и ее складываем два раза а 0 его 0 и при сложении будет ноль. Ну че, понятно ??
function huinia(data) {
if (data.length < 2) return data[0] || 0;
let res = [], i;
data.sort((a, b) => a - b);
for (i = data.length - 2; i >= 0 && data[i] > 1; i -= 2)
res.push(`${data.pop()}*${data.pop()}`);
for (i = data.length - 1; i >= 0 && data[i] > 0; i--)
res.push(data.pop());
if (data.length & 1) res.push(data.pop());
for (i = data.length - 1; i > 0; i -= 2)
res.push(`(${data.pop()}*${data.pop()})`);
return res.join(' + ');
}
console.log(huinia([1, 0, 0, -1, 3, 2, 4, 2, -1, -2, -3, -4]));