С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Alkcatraz
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 63

Поиск последовательности элементов максимальной длины в массиве

06.01.2013, 17:52. Показов 3915. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу, вот условия программы...Даны два массива. Напишите программу, которая находит такую последовательность элементов максимальной длины, которая содержится и в первом, и во втором массивах.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.01.2013, 17:52
Ответы с готовыми решениями:

Поиск в одномерном целочисленном массиве кольца максимальной длины
Прошу мне помочь решить эту задачу... Поиск в одномерном целочисленном массиве кольца максимальной длины. Кольцо - это переход с...

Подсчет максимальной длины последовательности непрерывно возрастающих значений элементов массива
Опишите на русском языке или одном из языков программирования алгоритм подсчета максимальной длины последовательности непрерывно...

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

9
136 / 107 / 61
Регистрация: 05.02.2012
Сообщений: 241
06.01.2013, 19:15
Не уверен, что это польностью правильно. Но на моем примере вроде работает.
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
#include <iostream>
 
using std::cout;
using std::cin;
 
int determineLengthOfSequence(int size1, int* array1, int indexOfStartOfSequenceForArray1, int size2, int* array2, int indexOfStartOfSequenceForArray2)
{
    int lengthOfSequence = 0;
    for (int i = indexOfStartOfSequenceForArray1, j = indexOfStartOfSequenceForArray2; i < size1 && j < size2; i++, j++)
    {
 
        if (array1[i] == array2[j])
        {
            lengthOfSequence++;
        }
        else
        {
            return lengthOfSequence;
        }
    }
    return lengthOfSequence;
}
 
int main(int argc, char* argv[])
{
    const int size1 = 10;
    int array1[size1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    const int size2 = 15;
    int array2[size2] = {9, 7, 5, 1, 2, 3, 4, 5, 6, 1, 5, 2, 8, 9, 0};
 
    int indexOfStartOfMaxSequenceForArray1 = 0;
    int indexOfStartOfMaxSequenceForArray2 = 0;;
    int lengthOfMaxSequence = 1;
    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            if (array1[i] == array2[j])
            {
                int temp = determineLengthOfSequence(size1, array1, i, size2, array2, j);
                temp > lengthOfMaxSequence ? lengthOfMaxSequence = temp, indexOfStartOfMaxSequenceForArray1 = i, indexOfStartOfMaxSequenceForArray2 = j : lengthOfMaxSequence = lengthOfMaxSequence;
            }
        }
    }
 
    for (int i = indexOfStartOfMaxSequenceForArray1; i < indexOfStartOfMaxSequenceForArray1 + lengthOfMaxSequence; i++)
    {
        cout << array1[i] << "  ";
    }
    cout << '\n';
 
    return 0;
}
Знаю выглядит ужасно. Строго не судите))
0
06.01.2013, 21:48

Не по теме:

Игорь Миронюк очень длинные названия для переменных.

0
 Аватар для Alkcatraz
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 63
06.01.2013, 23:47  [ТС]
Цитата Сообщение от Игорь Миронюк Посмотреть сообщение
Не уверен, что это польностью правильно. Но на моем примере вроде работает.

Знаю выглядит ужасно. Строго не судите))
danke, а код попроще есть?
0
136 / 107 / 61
Регистрация: 05.02.2012
Сообщений: 241
07.01.2013, 00:03
В принципе, алгоритм довольно прост. Просто у меня большие названия переменным даны, что б не перепутать ничего. Дай свои имена и код станет не таким ужасным. Если есть вопросы по алгоритму спрашивай?
0
 Аватар для David Sylva
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
07.01.2013, 00:05
Игорь Миронюк, Вы меня конечно извините, то так делать нельзя это очень плохой стиль программирования(относительно имён).
0
136 / 107 / 61
Регистрация: 05.02.2012
Сообщений: 241
07.01.2013, 00:08
Я не спорю. Самому не нравится. Просто писал и разбирался параллельно, поэтому и имена давал "говорящие".
0
 Аватар для Alkcatraz
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 63
07.01.2013, 01:42  [ТС]
Цитата Сообщение от Игорь Миронюк Посмотреть сообщение
В принципе, алгоритм довольно прост. Просто у меня большие названия переменным даны, что б не перепутать ничего. Дай свои имена и код станет не таким ужасным. Если есть вопросы по алгоритму спрашивай?
я имею ввиду без функции determineLengthOfSequence.
так чтобы всё в 1-й main
4-й месяц Cи++ изучаю
0
136 / 107 / 61
Регистрация: 05.02.2012
Сообщений: 241
07.01.2013, 02:32
Функцию убрал:
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
#include <iostream>
 
using std::cout;
 
int main(int argc, char* argv[])
{
    const int size1 = 10;
    int array1[size1] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    const int size2 = 15;
    int array2[size2] = {9, 7, 5, 1, 2, 3, 4, 5, 5, 8, 5, 2, 8, 9, 0};
 
    int indexOfStartOfMaxSequenceForArray1 = 0;
    int indexOfStartOfMaxSequenceForArray2 = 0;;
    int lengthOfMaxSequence = 1;
    for (int i = 0; i < size1; i++)
    {
        for (int j = 0; j < size2; j++)
        {
            if (array1[i] == array2[j])
            {
                int lengthOfSequence = 0;
                for (int k = i, l = j; i < size1 && j < size2; k++, l++)
                {
 
                    if (array1[k] == array2[l])
                    {
                        lengthOfSequence++;
                    }
                    else
                    {
                        break;
                    }
                }
                lengthOfSequence > lengthOfMaxSequence ? lengthOfMaxSequence = lengthOfSequence, indexOfStartOfMaxSequenceForArray1 = i, indexOfStartOfMaxSequenceForArray2 = j : lengthOfMaxSequence = lengthOfMaxSequence;
            }
        }
    }
 
    for (int i = indexOfStartOfMaxSequenceForArray1; i < indexOfStartOfMaxSequenceForArray1 + lengthOfMaxSequence; i++)
    {
        cout << array1[i] << "  ";
    }
    cout << '\n';
 
    return 0;
}
1
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
07.01.2013, 03:58
Вот мой алгоритм поиска:
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 <iterator>
#include <algorithm>
#include <array>
 
int main()
{
    std::array<int, 16> firstAr =  {7, 4, 9, 6, 7, 1, 2, 4, 5, 6, 1, 5, 2, 8, 9, 0};
    std::array<int, 11> secondAr = {         1, 2, 8, 4, 9, 6, 7, 1,       8, 9, 0};
 
    auto find_pos = firstAr.begin();  //позиция поиска
    auto find_mismatch = std::make_pair(firstAr.begin(), secondAr.begin()); //пара итератовов где элементы несходятся
    auto mynumber = std::make_pair(secondAr.begin(), secondAr.begin());     //пара двух итераторов на на нашу ищуюся последовательность элементов
    unsigned count = 0; //количество наибольших совпадений элементов
 
    for (auto it = secondAr.begin(); it != secondAr.end(); ++it)
    {
        while (find_pos != firstAr.end())
        {
            find_pos = std::find(find_mismatch.first, firstAr.end(), *it);  //найти позицию первого и остальных вхождений елемента *it массива secondAr в массиве firstAr
            if (find_pos != firstAr.end())
            {
                find_mismatch = std::mismatch(find_pos, firstAr.end(), it);  //найти первое несовпадение последовательностей элементов
                if (std::distance(it, find_mismatch.second) > count)
                {
                    mynumber = std::make_pair(it, find_mismatch.second);           //запомнить наибольшею последовательность совпадающих элементов
                    count = std::distance(it, find_mismatch.second);             //обновить количество наибольших совпадений элементов
                }
            }
        }
        find_mismatch.first = firstAr.begin();
        find_pos = firstAr.begin();
    }
 
    std::copy(mynumber.first, mynumber.second, std::ostream_iterator<int>(std::cout," "));
 
    std::cout<<"\n";
    system("pause");
    return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2013, 03:58
Помогаю со студенческими работами здесь

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

Выполнить в двумерном массиве поиск столбца с максимальной суммой элементов
Выполнить в двумерном массиве поиск столбца с максимальной суммой элементов.Помогите плиз с решением задачи

Поиск последовательности элементов в массиве
В универе задали создать программу авторизации (иначе не знаю как объяснить). В начале на выбор предлагается два действия - добавить...

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru