Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Найти максимум среди сумм трех соседних элементов в массиве  [new]
x17.mstu
Member

Откуда:
Сообщений: 312
подскажите как оптимально решить задачу. Предполагается два цикла - один внешний который будет идти по парно , другой внутренний считающий сумму в парах . так ?

Не понятно как написать внешний цикл который будет считать что пара - это именно когда есть предыдущий элемент и последующий и именно для нее нужно произвести сумму


Создать новый массив размера 100 и заполнить его случайными числами из диапазона от 0 до 10000.
Найти максимум среди сумм трех соседних элементов. Для найденной тройки с максимальной суммой выведите значение суммы и индекс первого элемента тройки.

Пример:
*Для простоты пример показан на массиве размера 10

[1, 456, 1025, 65, 954, 2789, 4, 8742, 1040, 3254]

Тройка с максимальной суммой: [8742, 1040, 3254]

Вывод в консоль:
13036
7
29 окт 20, 14:36    [22222948]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
chpasha
Member

Откуда:
Сообщений: 10037
один цикл - на каждом шаге просто добавляешь к текущему элементу следующие два и проверяешь сумму. только нужно учесть, что следующие два будут существовать не всегда, в худшем случае никогда (если размер массива меньше 3).
29 окт 20, 15:21    [22222986]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
x17.mstu
Member

Откуда:
Сообщений: 312
chpasha, Но чтобы вывести Тройку с максимальной суммой и индекс: [8742, 1040, 3254]
нужен же цикл еще один внешний?
29 окт 20, 15:51    [22223009]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
chpasha
Member

Откуда:
Сообщений: 10037
а ну вывести конечно, просто вывод это уже формальности. но для нахождения такой тройки нужен только один цикл (хотя если бы в условии была сумма 10 рядом стоящих элементов или 100 или по условию кол-во элементов это изменяемый параметр, то уже нужен был бы второй цикл для подсчета)

Сообщение было отредактировано: 29 окт 20, 15:56
29 окт 20, 15:58    [22223019]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
x17.mstu
подскажите как оптимально решить задачу. Предполагается два цикла - один внешний который будет идти по парно , другой внутренний считающий сумму в парах . так ?

Не понятно как написать внешний цикл который будет считать что пара - это именно когда есть предыдущий элемент и последующий и именно для нее нужно произвести сумму


Создать новый массив размера 100 и заполнить его случайными числами из диапазона от 0 до 10000.
Найти максимум среди сумм трех соседних элементов. Для найденной тройки с максимальной суммой выведите значение суммы и индекс первого элемента тройки.

Пример:
*Для простоты пример показан на массиве размера 10

[1, 456, 1025, 65, 954, 2789, 4, 8742, 1040, 3254]

Тройка с максимальной суммой: [8742, 1040, 3254]

Вывод в консоль:
13036
7


> подскажите как оптимально решить задачу.
Недостаточно данных. Оптимально по какому параметру?

Самый простой для понимания:
- создать второй массив размера 98 элементов (100-2)
- поместить в него суммы троек (один цикл)
- найти максимум во втором массиве (второй цикл).

Совместить два цикла: шаги 2 и 3 в одном цикле, второй массив не нужен.

Если все еще непонятно, напишите код инициализации массива, я напишу цикл.

П.С. уточните условие максимума, их может быть несколько. Первый? Последний? Любой? Что ожидается от 0,0,0,0,0,0,0 ?
29 окт 20, 16:58    [22223061]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
yvprod
Member

Откуда:
Сообщений: 24
x17.mstu
подскажите как оптимально решить задачу. Предполагается два цикла - один внешний который будет идти по парно , другой внутренний считающий сумму в парах . так ?

7


Что значит сумма в парах, если сумма для тройки?

i индекс элемента, i++. i<количество элементов -2

Сравниваешь для каждой итерации сумму с текущим максимумом, индекс сохраняешь в еще одну переменную, тройку тоже в переменные затолкай если нужно

Или я чего то не понял?

Сообщение было отредактировано: 29 окт 20, 18:08
29 окт 20, 18:10    [22223110]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
graycode
Member

Откуда:
Сообщений: 461
x17.mstu,

У вас две задачи в одном сообщении или одна?

Как пары вдруг стали тройками?

Если нужна максимальная сумма трех элементов, тогда в одном цикле окном в три элемента проходите по набору данных:
инициализируем сумму минимальным значением инта (если это инты) или 0.

[1, 456, 1025, 65, 954, 2789, 4, 8742, 1040, 3254]
1-я итерация
индекс 0, сумма 1+456+1025, сохраняем сумму и индекс, если рассчитанная больше сохраненной
2-я итерация
индекс 1, (сумма -1+ 65) или (456 + 1025 + 65), сохраняем сумму и индекс, если рассчитанная больше сохраненной
и т.д.
до тех пор пока третий элемент существует, т.е. (i = 0; i < длина массива - 2; i ++)

выводим результат.
29 окт 20, 19:38    [22223160]     Ответить | Цитировать Сообщить модератору
 Re: Найти максимум среди сумм трех соседних элементов в массиве  [new]
Dmitry.
Member

Откуда: Boston, MA
Сообщений: 849
достаточно одного цикла

import java.util.*;
class A{
    public static void main(String [] args){
        List<Integer> a = Arrays.asList(1, 456, 1025, 65, 954, 2789, 4, 8742, 1040, 3254);
        int trioIndex = -1; //not found
        int trioMaxSum = Integer.MIN_VALUE; //minimal value
        for(int i=0; i<a.size()-2; i++){
            int currentSum = a.get(i)+a.get(i+1)+a.get(i+2);
            if(currentSum>trioMaxSum) {
                trioMaxSum = currentSum;
                trioIndex = i;
            }
        }
        if(trioIndex>=0){
            System.out.println("index = "+trioIndex);
            System.out.println("trio  = "+a.subList(trioIndex,trioIndex+3));
            System.out.println("sum   = "+trioMaxSum);
        }else{
            System.out.println("not found");
        }
    }
}
30 окт 20, 03:46    [22223333]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить