Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93

Массив: Найти такую неразрывную последовательность положительных чисел, сумма элементов у которой максимальная.

11.04.2013, 16:40. Показов 4158. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Найти такую неразрывную последовательность положительных чисел, сумма элементов у которой максимальная.

ну вот я сделал, но только будет работать, если есть только один отрицательный элемент.
C++
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
#include<iostream>
#include<conio.h>
using namespace std;
 
int main()
 {
          const int n=8;
          int i,a[n],z,c,p,d,k;
          
          cout<<"vvod elem massiva"<<endl;
          for (i=0;i<n;i++)
           cin>>a[i];
           z=0; c=0;
           for (i=0;i<p;i++)
            if (a[i]>0)
            z=z+a[i];
        else p=i; k=0;
         for (i=p+1;i<n;i++)
           if (a[i]>0) 
         d=d+a[i];
         if (z>d)
         
          for (i=0;i<p;i++)
          cout<<a[i]<<"    ";
          else  
           
          for (i=p+1;i<n;i++)
          cout<<a[i]<<"    ";
          
        getch();
       return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.04.2013, 16:40
Ответы с готовыми решениями:

Найти такую непрерывную последовательность положительных чисел, сумма элементов в которой максимальна
В произвольном массиве нужно найти такую непрерывную последовательность положительных чисел, сумма элементов в которой максимальна. ...

Найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная
Найти ту непрерывную последовательность положительных чисел, сумма элементов в которой максимальная Размер массива 100 Диапазон...

Найти непрерывную последовательность положительных чисел, сумма элементов которой максимальна
Знайти таку нерозривну послыдовнысть позитивних чисел сума елементыв якый максимальна

21
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 16:50
myxayan, а выводить только сумму или еще индексы?
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 16:51  [ТС]
не, вот надо вывести просто ряд элементов, у которых сумма максимальна, хотя думаю сумма тоже не помешает)
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 17:08
myxayan, ща посмотрю)

Добавлено через 14 минут
myxayan, вот посмотри, вдруг что-то не так, скажи)

C++
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <iomanip>
#include <array>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <functional>
using namespace std;
 
bool pred(int elem){
    return elem > 0;
}
 
int main()
{
    array<int, 10> coll;
 
    cout << "Enter the array: ";
    for(int i = 0; i < 10; ++i)
        cin >> coll[i];
 
    cout << "\nSource array: " << setw(15 - strlen("Source array"));
    copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " "));
 
    int max, num;
    array<int, 10>::iterator pos1, pos2, pos3, pos4,
        it = coll.begin();
 
    pos1 = find_if(coll.begin(), coll.end(), pred);
 
    if(pos1 != coll.end()){
        pos2 = find_if(pos1 + 1, coll.end(), not1(ptr_fun(pred)));
 
        pos3 = pos2;
        max = accumulate(pos1, pos2, 0);
 
        while(it != coll.end()){
            pos3 = find_if(pos3, coll.end(), pred);
 
            if(pos3 != coll.end()){
                pos4 = find_if(pos3 + 1, coll.end(), not1(ptr_fun(pred)));
 
                num = accumulate(pos3, pos4, 0);
 
                if(max < num){
                    max = num;
                    pos1 = pos3;
                    pos2 = pos4;
                }
                
                if(pos4 != coll.end()){
                    it = pos4; 
                    ++it;
                    pos3 = it;
                }
                else
                    break;
            }
            else
                break;
        }
 
        if(pos2 != coll.end()){
            cout << "\nNumber of elements: ";
            copy(pos1, pos2, ostream_iterator<int>(cout, " "));
        }
    }
 
    cout << "\n\n";
    return 0;
}
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 17:11
myxayan, эта задача делается через 2 указателя, и при малых n через квадратную динамику. Скажите ограничения на задачу (время память max n)
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 17:14  [ТС]
Ternsip, да знаю, учитель сказала, что нужно 1 положительный эл. запомнить и последний, и потом както чудить, но я както не додумал.
и не знаю как запомнить первый, такто последний вроде запоминается, у меня это p.
C++
1
else p=i;
но а так не знаю, что дальше..
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 17:17
myxayan, повторюсь, скажите ограничения.
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 17:19  [ТС]
yoghurt92, хм, но мне кажется, что учитель заметит, чтото тут сильно расписано, мы только в феврале начали изучать с++, закончили циклы недавно.
и еще я через dev c++ пишу, так он выдает ошибки разные.
Миниатюры
Массив: Найти такую неразрывную последовательность положительных чисел, сумма элементов у которой максимальная.  
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 17:23
myxayan, сейчас перепишу просто.
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 17:25  [ТС]
Ternsip, что такое квадратная динамика? хх
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 17:27
myxayan, это когда вы делаете полный перебор очень быстро, запоминая ответ (сумму) с i по j клетки. Но вы проигнорировали меня и не сказали ограничения.
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 17:36  [ТС]
просто занят еще другой программой.
Цитата Сообщение от Ternsip Посмотреть сообщение
(время память max n)
в самой задачи ограничений нет, и учитель не говорил ничего.
даже впервые услышал от вас.
время - вроде никаких нет ограничений, но для такой задачи вроде много времени и не надо.
память - тоже самое
max -любое число максимальное.
n - тоже в принципе любое, но я вот сделал 8.
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 18:04
myxayan, Способ решения из раздела "Ленивое программирование"
C++
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
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <limits>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <tuple>
 
using namespace std;
 
const int NMAX = 100;
vector < vector <int> > ans(NMAX, vector <int> (NMAX, -1));
vector < int > a(NMAX);
int bi = 0, bj = 0;
 
int solv(int i, int j){
    if (i > j)
        return 0;
    if (ans[i][j] != -1)
        return ans[i][j];
    ans[i][j] = solv(i+1, j) + a[i];
    if (ans[bi][bj] < ans[i][j]){
        bi = i;
        bj = j;
    }
    return ans[i][j];
}
 
 
int main(){         
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    ans[0][0] = a[1];
    for (int i = 0; i < n; i++)
        solv(0, i);
    printf("from %d to %d sum = %d", bi+1, bj+1, ans[bi][bj]); // один-индексация
    return 0;
}
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 18:06
myxayan,

C++
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    const int size(10);
    int mas[size], sum(0),
        num(0), idx, jdx, idx_s, jdx_s;
 
    cout << "Enter the array: ";
    for(int i = 0; i < size; ++i)
        cin >> mas[i];
 
    cout << "\nSource array: " << setw(15 - strlen("Source array"));
    for(int i = 0; i < size; ++i)
        cout << mas[i] << ' ';
 
    for(int i = 0; i < size; ++i){
        if(mas[i] > 0){
            idx = i;
            break;
        }
    }
 
    if(idx < size){
        for(int i = 0; i < size; ++i){
            if(mas[i] < 0){
                jdx = i;
                break;
            }
        }
    }
 
    idx_s = jdx;
    for(int i = idx; i < jdx; ++i)
        sum += mas[i];
 
    while(idx_s < size){
        for(int i = idx_s; i < size; ++i){
            if(mas[i] > 0){
                idx_s = i;
                break;
            }
        }
 
        if(idx_s < size){
            bool flag(false);
            for(int i = idx_s; i < size; ++i){
                if(mas[i] < 0){
                    jdx_s = i;
                    flag = true;
                    break;
                }
            }
 
            if(!flag)
                jdx_s = size;
        }
 
        num = 0;
        for(int i = idx_s; i < jdx_s; ++i)
            num += mas[i];
 
            if(sum < num){
                sum = num;
                idx = idx_s;
                jdx = jdx_s;
            }
                
            if(jdx_s == size)
                break;
            else
                idx_s = jdx_s;
    }
 
 
    cout << "\nNumber of elements: ";
    for(int i = idx; i < jdx; ++i)
        cout << mas[i] << ' ';
 
 
    cout << "\n\n";
    return 0;
}
2
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 18:12  [ТС]
Спасибо)
1
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 18:15
myxayan, Если вам помогли, есть кнопочка (+1 Спасибо)
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 18:26
Ternsip, я посмотрел вашу программу и ввел 10 чисел 1 2 3 4 -5 6 7 8 -9 10, должно выдать 6 7 8, но ваша программа выдает от 1 до 9 элемента, это же не правильно...
0
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
11.04.2013, 18:28
yoghurt92, оу я и забыл, что числа должны быть положительными в промежутке, спасибо) сейчас пофикщю
0
 Аватар для myxayan
4 / 4 / 8
Регистрация: 16.10.2012
Сообщений: 93
11.04.2013, 18:30  [ТС]
Точно забыл, сейчас будет +1)
0
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
11.04.2013, 18:33
Ternsip, да все мы не идеальны)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2013, 18:33
Помогаю со студенческими работами здесь

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

Найти ту непрерывную последовательность чисел, сумма элементов в которой максимальна.
Помогите с лабой, нужен код. Буду благодарен Найти ту непрерывную последовательность чисел, сумма элементов в которой максимальна. ...

Массив: Распечатать одну из трех матриц, в которой находится максимальная сумма элементов 3-го столбца
Использовать подпрограммы (ввода, вывода, обрабатывающей части). Даны 3 матрицы целых чисел: (4*3), (4*4), (3*3). Распечатать ту из них, в...

В двухмерном массиве найти номер строки, сумма элементов которой максимальная
В двухмерном массиве найти номер строки, сумма элементов которой максимальная

Найти координаты начала той области, сумма значений элементов которой максимальная
Задано количество строк и столбцов матрицы, действительные значения её элементов и размеры прямоугольной области. Найти координаты начала...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru