Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Terra-Fox
0 / 0 / 1
Регистрация: 08.09.2018
Сообщений: 51

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

23.11.2018, 22:14. Показов 2039. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый вечер. Массив из 200 элементов с диапазоном 50 - 200, заполнение по рандому. Найти непрерывный участок из 10 элементов, сумма которых максимальна. Тема примерно похоже на эту. Скажем 10 элементов которые стоят сразу по возрастнию и находить такие же несколько, и так же эти 10 элементов прибавлять их элементы и сравнивать с другими 10-ми элементами. Например: стоят по возрастанию 1, 5, 7, 12, 20, 90 и след. 12, 20,90,100,125 и сравнить их все и найти максимальный. P.S. Размерность и диапазон а так же непрерывный участок можно изменить на числа поменьше.
На примере массив из 30 элементов с диапазонам 0 - 30, которые находит каждые 3 элемента по возрастанию находя между ними самый максимальный:
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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main()
{
    system("color F0");
    srand(time(NULL));
    setlocale(LC_ALL, "rus");
    const int N = 30;
    int A[N], A1[N], max = 0;
    cout << "Жиым:" << endl;
    for (int i = 0; i < N; i++)
    {
        A[i] = rand() % 250 + 50;
        cout << A[i] << " ";
    }
    cout << endl;
    cout << "Табылган элементтер жиыны:" << endl;
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                cout << A[i] << " " << A[i + 1] << " " << A[i + 2] << " " << endl;
            }
            else
                cout << A[i] << " " << A[i + 1] << " " << A[i + 2] << endl;
        }
    }
    cout << "Косылган шешимдер: " << endl;
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                cout << "Шешимдери:" << A[i] + A[i + 1] + A[i + 2]<< endl;
            }
            else
                cout << "Шешимдери:" << A[i] + A[i + 1] + A[i + 2] << endl;
        }
    }
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                A1[i] = A[i] + A[i + 1] + A[i + 2] + A[i + 3];
            }
            else
                A1[i] = A[i] + A[i + 1] + A[i + 2];
 
        }
        if (A1[i]>max)
        {
            max = A1[i];
        }
 
    }
    cout << endl << "Ен улкени:" << max << endl;
    _getch();
    return 0;
}
В программы запрещается применять операцию индексации, только УКАЗАТЕЛИ.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.11.2018, 22:14
Ответы с готовыми решениями:

Найти непрерывный участок из 10 элементов, сумма которых максимальна
Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200, а диапазон значений от 0 до 100.

Как найти непрерывный участок элементов массива, сумма которых максимальна?
Нужно найти непрерывный участок массива из 10 элементов, сумма которых максимальная, и всё это сделать через указатели. Проблема...

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

6
 Аватар для Terra-Fox
0 / 0 / 1
Регистрация: 08.09.2018
Сообщений: 51
24.11.2018, 11:36  [ТС]
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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main()
{
    system("color F0");
    srand(time(NULL));
    setlocale(LC_ALL, "rus");
    const int N = 30;
    int A[N], A1[N], max = 0;
    cout << "Массив:" << endl;
    for (int i = 0; i < N; i++)
    {
        A[i] = rand() % 250 + 50;
        cout << A[i] << " ";
    }
    cout << endl;
    cout << "Найденные элементы массива: " << endl;
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                cout << A[i] << " " << A[i + 1] << " " << A[i + 2] << " " << endl;
            }
            else
                cout << A[i] << " " << A[i + 1] << " " << A[i + 2] << endl;
        }
    }
    cout << "Прибавленные решения: " << endl;
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                cout << "Решения:" << A[i] + A[i + 1] + A[i + 2]<< endl;
            }
            else
                cout << "Решения:" << A[i] + A[i + 1] + A[i + 2] << endl;
        }
    }
    for (int i = 0; i < N; i++)
    {
        if (A[i] < A[i + 1] && A[i + 1] < A[i + 2]) {
            if (A[i + 2] < A[i + 3])
            {
                A1[i] = A[i] + A[i + 1] + A[i + 2] + A[i + 3];
            }
            else
                A1[i] = A[i] + A[i + 1] + A[i + 2];
 
        }
        if (A1[i]>max)
        {
            max = A1[i];
        }
 
    }
    cout << endl << "Максимальный:" << max << endl;
    _getch();
    return 0;
}
0
23 / 15 / 7
Регистрация: 05.04.2018
Сообщений: 34
24.11.2018, 14:19
Добрый. Первое, что бросается в глаза, в 15-ой строчке диапазон получается 50-300, нужно так: rand() % 150 +50

Добавлено через 2 часа 10 минут
Не очень понятно условие задачи. Если делать по этому условию
Цитата Сообщение от Terra-Fox Посмотреть сообщение
Добрый вечер. Массив из 200 элементов с диапазоном 50 - 200, заполнение по рандому. Найти непрерывный участок из 10 элементов, сумма которых максимальна.
то у меня вот что получилось:
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
#include <iostream.h>
#include <stdlib.h> //нужно для функции rand()
#include <time.h> //для функции time()
 
//N - длина массива, S - длина последовательности складываемых элементов
#define N 10
#define S 3
 
using namespace std;
 
int main()
{
    srand(time(NULL)); //устанавливаем в качестве зерна функции rand() текущее время в секундах
    setlocale(LC_ALL, "rus");
    //sum_cur - сумма текущих S элементов
    //sum_max - максимальная найденная сумма S элементов
    //i_max - индекс первого элемента последовательности из S элементов с максимальной суммой
    int mas[N], sum_cur, sum_max, i_max;
 
    //заполняем массив в диапазоне 5-15 и выводим его на экран
    cout << "Жиым:\n";
    for (int i = 0; i < N; i++)
    {
        mas[i] = rand() % 10 + 5;
        cout << mas[i] << " ";
    }
    cout << endl;
 
    //находим сумму первых S элементов
    sum_cur = 0;
    i_max = 0;
    for (int i = i_max; i < i_max + S; i++)
        sum_cur += mas[i];
    sum_max = sum_cur;
 
    //проходим по всему массиву, вычитая первый элемент и складывая следующий за последовательностью
    for (int i = i_max + 1; i < N - S + 1; i++)
    {
        sum_cur -= mas[i - 1];
        sum_cur += mas[i + S - 1];
        if (sum_cur > sum_max)
        {
            sum_max = sum_cur;
            i_max = i;
        }
    }
 
    //выводим на экран полученный результат
    cout << "Ен улкени = " << sum_max << " i ен улкени = " << i_max << endl << "Элементерр ен улкени: ";
    for (int i = i_max; i < i_max + S; i++)
        cout << mas[i] << " ";
    cout << endl;
 
    //ожидаем нажатия Enter
    cin.get();
 
    return 0;
}
Но сильно подозреваю, что там ещё дополнительные условия.
1. Последовательность должна состоять из возрастающих, или неубывающих чисел? Т.е. подойдёт ли 1 1 2 2, или только если 1 3 4 8? Или это условие вообще из старой задачи и в новой задаче этого условия нет?
2. Последовательность может состоять меньше, чем из 10 элементов? То есть мы задали максимальную длину в 10 и складываем элементы всех возрастающих последовательностей не длиннее 10?
Вот есть массив 5 6 1 3 9 4 2 3
получили последовательности: 5 6, 1 3 9, 2 3. То есть они могу быть разной длины?
3. Не очень понятно куда там указатели лепить, но это у меня от недостатка знаний, скорее всего

Накидал бы примеров как должно быть, думаю было бы проще чем словами.
1
 Аватар для analogov net
2523 / 1122 / 493
Регистрация: 17.11.2018
Сообщений: 2,828
24.11.2018, 14:36
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
#include <iostream>
#include <time.h>
#include <math.h>
 
 
#define  SIZE  7
#define  SEQ   3
 
using namespace std;
 
int main()
{
    srand ( ( unsigned ) time ( NULL ) );
    
    int   ar[SIZE]; 
    int   maxSum  = 0;    
    int   curSum  = 0;
    
    for ( int * p = ar; p < ar + SIZE; p++ )
    {
        *p = rand( ) % 10 + 1;
        if( p < ar + SEQ )
            curSum += *p;
    }
    
    maxSum = curSum;
    for ( int * p = ar; p < ar + SIZE - SEQ; p++ )
    {
        curSum += *(p + SEQ) - *p;
        if( curSum > maxSum )
            maxSum = curSum;
    }
    
    for ( int * p = ar; p < ar + SIZE; p++ )
        cout << *p << ' ';
    
    cout << "\nmaxsum = "  << maxSum;  
    
    return 0;
}
2
23 / 15 / 7
Регистрация: 05.04.2018
Сообщений: 34
24.11.2018, 14:40
Да, ошибся, в
C++
1
rand() % 250 + 50
результат будет 50-299. Чтобы получить 50-200, код должен быть таким:
C++
1
rand() % 151 + 50;
А в моём коде
C++
1
rand() % 10 + 5
результатом будет число в диапазон 5-14
1
 Аватар для Terra-Fox
0 / 0 / 1
Регистрация: 08.09.2018
Сообщений: 51
24.11.2018, 22:05  [ТС]
Axmap, насчет диапазона да косяк
1. Да то есть состоять из возрастающих, как к примеру 1,3,5,9. (Да из старой задачи)
2. Нет, не меньше то есть всегда 10 элементов, больше десяти тоже нельзя.
3. Указатели лепить нужно, например: char str [80], *p1; p1 = str; * (p1 +4); Скажем где цикл в массиве примерно будет так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
        int A[N];
    int *B = &A[0];
        for (int i = 0; i < N; i++)
    {
       if (*(B + i) < *(B + i + 1) && *(B + i + 1) < *(B + i + 2)) {
            if (*(B + i + 2) < *(B + i + 3)) {
                cout << *(B + i) << " " << *(B + i + 1) << " " << *(B + i + 2) << " " << endl;
            }
            else
                cout << *(B + i) << " " << *(B + i + 1) << " " << *(B + i + 2) << " " << endl;
        }
    }
P.S. Индексация элементов массива проводилось с помощью указателей.

Добавлено через 6 минут
А что если сделаем так?
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
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
int main()
{
    system("color F0");
    srand(time(NULL));
    setlocale(LC_ALL, "rus");
    const int N = 30;
    int A[N], A1[N], max = 0, i;
    int *B = &A[0], *B1 = &A1[0];
    cout << "Массив:" << endl;
    for (i = 0; i < N; i++) {
        *(B + i) = 50 + rand() % 150;
        cout << *(B + i) << " ";
    }
    cout << endl;
    cout << "Найденные элементы массива:" << endl;
    for (i = 0; i < N; i++) {
        if (*(B + i) < *(B + i + 1) && *(B + i + 1) < *(B + i + 2)) {
            if (*(B + i + 2) < *(B + i + 3)) {
                cout << *(B + i) << " " << *(B + i + 1) << " " << *(B + i + 2) << " " << endl;
            }
            else
                cout << *(B + i) << " " << *(B + i + 1) << " " << *(B + i + 2) << " " << endl;
        }
    }
    cout << "Прибавленные элементы: " << endl;
    for (i = 0; i < N; i++) {
        if (*(B + i) < *(B + i + 1) && *(B + i + 1) < *(B + i + 2)) {
            if (*(B + i + 2) < *(B + i + 3)) {
                cout << "Ответы:" << *(B + i) + *(B + i + 1) + *(B + i + 2) << endl;
            }
            else
                cout << "Ответы:" << *(B + i) + *(B + i + 1) + *(B + i + 2) << endl;
        }
    }
    for (i = 0; i < N; i++) {
        if (*(B + i) < *(B + i + 1) && *(B + i + 1) < *(B + i + 2)) {
            if (*(B + i + 2) < *(B + i + 3)) {
                *(B1 + i) = *(B + i) + *(B + i + 1) + *(B + i + 2) + *(B + i + 3);
                }
            else
                A1[i] = *(B + i) + *(B + i + 1) + *(B + i + 2);
        }
        if (*(B1 + i) > max) {
            max = *(B1 + i);
        }
    }
    cout << endl << "Максимальный:" << max << endl;
    _getch();
    return 0;
}
0
 Аватар для Terra-Fox
0 / 0 / 1
Регистрация: 08.09.2018
Сообщений: 51
25.11.2018, 16:15  [ТС]
Проверьте выше написанный код, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2018, 16:15
Помогаю со студенческими работами здесь

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

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

Найти непрерывный участок из 10 элементов, сумма которых максимальна
Здравствуйте, вроде написал код, но ничего не могу понять, выходит лажа. Прога состоит из 3 этапов: 1. вводим 2 массива 2. складываем ...

Найти непрерывный участок из 10 элементов, сумма которых максимальна
Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200, а диапазон значений от 0 до 100.

Найти непрерывный участок из 10 элементов, сумма которых максимальна
Найти непрерывный участок из 10 элементов, сумма которых максимальна. Если размерность массива 200, а диапазон значений 0...100 Если...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru