Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 21.10.2019
Сообщений: 42
1

Найти максимальную сумму подряд идущих элементов

22.11.2019, 13:44. Показов 10756. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Задание.
Вводится массив целых чисел. Найти максимальную сумму подряд идущих элементов. Примечание: существует алгоритм, как можно получить такую сумму в один проход.Для вычислений использовать функцию Solution.
Разберу на примере, что именно нужно сделать.
Например, вводится вот такой массив:
1 2 3 4 -5 -4 1 2 8
Начинаем суммировать элементы.Суммируем до тех пор, пока не понимаем, что если мы просуммируем следующий член, то сумма не будет максимальной. То есть суммируем 1, 2,3,4. Затем, программа понимает, что если мы прибавим -5, то сумма уже не будет максимальной. По этой же причине пропускаем -4. Затем программа складывает 1, 2, 8 и получает максимальную сумму 11.
Надеюсь на вашу помощь.
То, что вышло, это сумма подряд идущих чисел, вроде 1,2,3,4,5.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.company;
 
import java.util.Scanner;
 
class Main {
    static Scanner scan = new Scanner(System.in);
 
    public static void main (String[] args) {
        System.out.print("Размер массива = ");
        int n = scan.nextInt();
        if (n < 1) return;
        int[] a = new int[n];
        input(a);
        print(a);
        System.out.println( Solution(a) );
    }
 
    static void input (int[] a) {
        for (int i=0; i<a.length; i++) {
            System.out.printf("a[%d] = ", i+1);
            a[i] = scan.nextInt();
        }
    }
 
    static void print (int[] a) {
        System.out.println("\nМассив:");
        for (int i=0; i<a.length; i++)
            System.out.printf("%4d", a[i]);
        System.out.println();
    }
 
    static int Solution (int[] a) {
        int sum = 0;
        int max = 0;
        boolean first = true;
        for (int i=0, k=1; k<a.length; i++, k++) {
            if (a[k]-a[i] == 1) {
                if (first) {
                    first = false;
                    sum += a[i];
                }
                sum += a[k];
            }
            else {
                if (sum > max) max = sum;
                sum = 0;
                first = true;
            }
            if (k+1 == a.length && sum > max) max = sum;
        }
        return max;
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2019, 13:44
Ответы с готовыми решениями:

Найти максимальную сумму подряд идущих элементов(по индексу)
Добрый день. Задание: Вводится массив целых чисел. Найти максимальную сумму подряд идущих...

Найти сумму всех идущих подряд в начале последовательности нечетных чисел
Дана последовательность из n вещественных чисел. Первое число в последовательности нечетное. Найти...

Найти самую длинную подпоследовательность подряд идущих чередующихся элементов массива
Вводится массив целых чисел. Найти самую длинную подпоследовательность подряд идущих элементов...

Найти и вывести наибольшее число возрастающих (убывающих) элементов матрицы, идущих подряд
Условие: Ввести с консоли n – размерность матрицы a. Задать значения элементов матрицы в интервале...

5
295 / 468 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
22.11.2019, 14:56 2
Лучший ответ Сообщение было отмечено Schock как решение

Решение

гля сюды
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static int sumMax(int[] m){
        int sum = 0;
        int max = 0;
        for(int i = 0; i < m.length; i++){
            if(m[i] > 0){
                sum += m[i];
            }
            else{
                if(sum > max){
                    max = sum;
                    
                }
                sum = 0;
            }
        }
        return sum > max ? sum : max;
    }
1
1 / 1 / 0
Регистрация: 21.10.2019
Сообщений: 42
22.11.2019, 15:54  [ТС] 3
InvalidCode, Спасибо большое. Так просто.... Почему я не догадался.......
0
466 / 393 / 122
Регистрация: 23.05.2016
Сообщений: 1,572
22.11.2019, 16:15 4
Schock,

В последовательности 1 2 3 4 -5 -4 1 2 8 сумма ВСЕХ элементов равна 12, она же и является максимальной суммой подряд идущих элементов (очевидно, что все элементы идут подряд), а вы нашли только сумму 11. Либо неправильная формулировка задачи, либо неправильное решение.
0
1 / 1 / 0
Регистрация: 21.10.2019
Сообщений: 42
22.11.2019, 16:23  [ТС] 5
Sindbad_M, Насчет этого вы правы. Но этот пример я взял у преподавателя после того, как я 2 раза ошибся с условием задачи (неправильно его понял). Может быть и он ошибся. Как выйти из этой ситуации?
Я думаю оставить эту функцию и еще добавить функцию, которая будет просто суммировать все элементы последовательности без разбора. И на выходе добавить проверку, что если summax>, то выводим summax. Если Сумма всех больше, то выводим ее. Так пойдет?
0
466 / 393 / 122
Регистрация: 23.05.2016
Сообщений: 1,572
22.11.2019, 16:27 6
Schock, усложняете. Возьмите за основу код InvalidCode. Двигаясь по массиву храните найденную максимальную сумму и текущую сумму. Текущую сумму обнуляйте не тогда, когда встретите первое отрицательное число, а когда текущая сумма станет отрицательной.
1
22.11.2019, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2019, 16:27
Помогаю со студенческими работами здесь

Найти наиболее длинную подпоследовательность подряд идущих элементов, которые равны (кроме двух произвольных)
Вводится массив целых чисел. Найти наиболее длинную подпоследовательность подряд идущих элементов...

Вводится массив целых чисел. Найти в данном массиве кол-во интервалов убывания (т.е. подряд идущих элементов, которые мо
import java.io.FileNotFoundException; import java.util.Scanner; import java.io.File; public...

Найти максимальную сумму не соседних элементов массива
Найти максимальную сумму не соседних элементов массива например: 1 2 3 1+3 = 4 3 5 1 5 ...

Найти максимальную сумму подряд идущих N элементов массива
Необходимо вывести максимальную сумму подряд идущих элементов массива. Вводятся такие данные: 1)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru