Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Чем отличается С++ от Visual С++? Здравствуете товарищи программисты! Только начал изучать язык программирования С++ и возникло пару вопросов. Чем отличается С++ от Visual С++? И еще посаветуйте какую-нибудь литературу на русском языке, для понятия основ языка.(В Универе дают только на английском) В поисковике искать не хотел, т.к. у бывалых программистов спросить лучше.Спасибо. https://www.cyberforum.ru/ cpp-beginners/ thread350822.html как кодить на с в Microsoft visual studio 2010 C++
первый раз встречаюсь с вижлой.как кодить на с в Microsoft visual studio 2010?обьясните поподробнее как что где создавать и как компилировать
C++ Solutions manual по книге c++ how to programm https://www.cyberforum.ru/ cpp-beginners/ thread350799.html
Апну темку и заодно мб, кто-нибудь имеет еще 1 книжку. Нужен solutions manual по книге c++ how to programm (5 издания). Заранее спс.
C++ Описать класс, реализующий бинарное дерево https://www.cyberforum.ru/ cpp-beginners/ thread350789.html
Здравствуйте! Возникли проблемы с реализацией одной программы ....Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам. Написать программу, использующую этот класс для представления англо-русского словаря. Программа должна содержать меню, позволяющее...
Не получаеться решить C++
Дана функция y(x)=Ax2+Bx+C, где A – количество букв в фамилии студента, B количество букв в имени студента, C количество букв в отчестве студента. Для функции y(x) составить программу построения таблицы значений функции при изменении аргумента от L до R с шагом T. В каждой строке выводить значения аргумента и соответствующее ему значение функции. Кроме того, в конце таблицы напечатать...
C++ Как удалить все элементы из очереди (queue) Есть очередь queue и в ней элементы, как удалить их все чтобы очередь осталась пустой? https://www.cyberforum.ru/ cpp-beginners/ thread350748.html
C++ вектор string в масив указателей на char Доброго дня, комрады. Вот несколько дней как начал разбираться в С++ по 4-му вводному курсу липмана. наткнулся на задачку в общем-то тривиальную, но в определенном месте немного вывихнул мозг. Задание: Напишите программу читающую строки в вектор. Скопируйте этот вектор в массив указателей на тип char. Для каждого элемента вектора создайте новый символьный массив и скопируйте данные из элемента... https://www.cyberforum.ru/ cpp-beginners/ thread350744.html Считать комманды пока они есть... C++
Здравствуйте! Есть команды в файле: ADD 192168812 ADD 125 ADD 321 EXTRACT EXTRACT CLEAR ADD 7 ADD 555
C++ Центр тяжести https://www.cyberforum.ru/ cpp-beginners/ thread350729.html
Горю! По координатам вершин многоугольника требуется найти координаты его центра тяжести. Стороны многоугольника друг с другом не соприкасаются (за исключением соседних - в вершинах) и не пересекаются. Площадь многоугольника не равна нулю. Технические условия Входные данные В первой строке находится число N, в следующих N строках - пары чисел - координаты точек. Если соединить...
C++ Семафоры(7 потоков) Требуется создать программу которая будет создавать 7 потоков и в каждом выполнять операцию а=а-1(изначально установить а=10). Доя решение задачи взаимного исключения использовать семафоры. Семафоры через библиотеку <windows.h>.( ReleaseSemaphore, WaitForSingleObject,CreateThread.) Кто умеет прошу помочь. Можно создать с 2-мя потоками, я думаю я пойму общий принцип. Заранее спасибо! https://www.cyberforum.ru/ cpp-beginners/ thread350724.html
Клиент к игре **** название abclient C++
Добрый вечер. Вот хотел бы узнать,с помощью чего можно сделать такой клиент,и новичок способен ли его сделать? И есть ли какой урок(И) по данной сборке,т.е не именно по аб... а по созданию таких вот штук?!
C++ С Днем програмиста!!! https://www.cyberforum.ru/ cpp-beginners/ thread350697.html
!!!!!!!
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
15.09.2011, 16:06 0

Найти самую длинную возрастающую цепочку простых чисел - C++ - Ответ 1986473

15.09.2011, 16:06. Показов 5621. Ответов 8
Метки (Все метки)

Ответ

Цитата Сообщение от ZeonExpert Посмотреть сообщение
2, 3, 4, 5, 6, 7, 3, 5, 7
2, 3, 10,5, 6, 7, 3, 5, 7
Но здесь не цепочка, у вас закрашенные элементы расположены непоследовательно.
А задача простая в общем-то...
Решается динамикой кстати.

Добавлено через 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
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
#include <iostream>
 
int main()
{   
    const int MAX_VALUE = 100500; //максимально возможная цифра
 
    char sieve[ MAX_VALUE ] = { 1, 1 }; //решето Эратосфена
    
    //заполнение решета
    
    for (int i = 2; i < MAX_VALUE ; ++i)
    {
        
        if ( sieve[i] == 0 )
        {
            for ( int j = i * 2 ; j < MAX_VALUE ; j += i )
                sieve[j] = 1;
        }
    }
    
    int arr[] = { 2, 3, 10,5, 6, 7, 3, 5, 7 };
    int size = sizeof( arr ) / sizeof( *arr );
    
    int * dinamic = new int [ size ];
    
    /* 
     * Для каждого члена последовательности находим длину максимальной
     * подпоследовательности, заканчивающейся на этом элементе
     */
    
    dinamic[0] = 0;
    for (int i = 1; i < size ; ++i)
    {
        dinamic[0] = 0;
        
        //если число не простое, последовательность не может оканчиваться на этот элемент
        if ( sieve[ arr[i] ] != 0 )
            continue;
        
        for ( int j = i - 1; j >= 0 ; --j)
            if ( sieve[arr[j]] == 0 && arr[j] < arr[i] )
                dinamic[i] = std::max( dinamic[i], dinamic[j] + 1 );
    }
    
    /*
     * нахождение длины максимальной подпоследовательности и элемента, 
     * на котором она заканчивается
     */
     
    int max = 0, pos = 0;
    for (int i = 0; i < size ; ++i)
    if ( dinamic[i] > max )
    {
        max = dinamic[i];
        pos = i;
    }
    
    //заполнение массива с ответом
    int * answer = new int [ dinamic[pos] + 1];
    
    answer[0] = arr[pos];
    int end = 0;
    
    for (int i = pos - 1, x = pos; i >= 0; --i)
    {
        if ( dinamic[i] + 1 == dinamic[x] )
        { 
            answer[++end] = arr[i];
            x = i;
        }
    }
    
    
    for (int i = end; i >= 0 ; --i)
        std::cout << answer[i] << ' ';
    
    delete[] answer;    
    delete[] dinamic;
}
За O(nlogn) примерно находит.

Для цепочки еще проще
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
/*
 * Найти максимальную по длине возрастающую цепочку простых чисел
 */
 
#include <iostream>
 
int main()
{   
    const int MAX_VALUE = 100500; //максимально возможная цифра
 
    char sieve[ MAX_VALUE ] = { 1, 1 }; //решето Эратосфена
    
    //заполнение решета
    
    for (int i = 2; i < MAX_VALUE ; ++i)
    {
        
        if ( sieve[i] == 0 )
        {
            for ( int j = i * 2 ; j < MAX_VALUE ; j += i )
                sieve[j] = 1;
        }
    }
    
    int arr[] = { 2, 3, 3, 5, 6, 7, 3, 5, 7  };
    int size = sizeof( arr ) / sizeof( *arr );
    
    int * dinamic = new int [ size ];
    
    /* 
     * Для каждого члена последовательности находим длину максимальной
     * подпоследовательности, заканчивающейся на этом элементе
     */
    
    dinamic[0] = 0;
    for (int i = 1; i < size ; ++i)
    {
        dinamic[0] = 0;
        
        //если число не простое, последовательность не может оканчиваться на этот элемент
        if ( sieve[ arr[i] ] != 0 )
            continue;
        
        if ( sieve[ arr[i - 1] ] == 0 && arr[i - 1] < arr[i] )
            dinamic[i] = std::max( dinamic[i], dinamic[i - 1] + 1 );
    }
    
    /*
     * нахождение длины максимальной подпоследовательности и элемента, 
     * на котором она заканчивается
     */
     
    int max = 0, pos = 0;
    for (int i = 0; i < size ; ++i)
    if ( dinamic[i] > max )
    {
        max = dinamic[i];
        pos = i;
    }
    
    //заполнение массива с ответом
    for (int i = pos - dinamic[pos] ; i <= pos ; ++i)
        std::cout << arr[i] << ' '; 
    
    delete[] dinamic;
}


Вернуться к обсуждению:
Найти самую длинную возрастающую цепочку простых чисел C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2011, 16:06
Готовые ответы и решения:

Цикл: Найти самую длинную неубывающую цепочку чисел
В цикле с клавиатуры вводится 15 целых чисел. Необходимо найти самую длинную неубывающую цепочку...

Найти самую длинную последовательность простых чисел
Доброго времени суток! Помогите пожалуйста доделать программу. Нужно из массива цифр, выделить...

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

В строке string найти самую длинную строго возрастающую подстроку
В общем, есть стока типа string. Мне нужно найти в ней максимальную подстроку такого вида...

8
15.09.2011, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.09.2011, 16:06
Помогаю со студенческими работами здесь

Найти в матрице самую длинную цепочку подряд стоящих 0 по горизонтали или вертикали
Матрица состоит из 0 и 1. Найти в ней самую длинную цепочку подряд стоящих 0 по горизонтали или...

В одномерном массиве найти самую длинную цепочку подряд стоящих элементов, которая является «палиндромом»
в одномерном массиве найти самую длинную цепочку подряд стоящих элементов, которая является...

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

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

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru