Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
rafiksaiti
1 / 1 / 0
Регистрация: 15.09.2012
Сообщений: 40
#1

Одномерный массив - C++

06.10.2012, 20:26. Просмотров 357. Ответов 5
Метки нет (Все метки)

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
- самую длинную подпоследовательность элементов массива, которая является палиндромом.

Дополнительных массивов для преобразования данных использовать нельзя.

Как это можно реализовать, подкиньте идею. В С++ начинающий, поэтому без особых замудреностей.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2012, 20:26     Одномерный массив
Посмотрите здесь:

Скопировать двумерный массив в одномерный массив из 50 элементов C++
Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. C++
Массив: Все элементы массива, кратные трем, записать в одномерный массив. C++
Дан двумерный массив размерностью 4*5. Сформировать одномерный массив C++
Дан двумерный массив. Сформировать одномерный массив из элементов заданного массива, расположенных под побочной диагональю. C++
Массив: найти номера столбцов с положительными элементами и записать их в одномерный массив C++
Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) C++
Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию C++
Сформировать одномерный массив, удалить первый элемент с заданным значением, сдвинуть массив циклически C++
Как сложить массив чтоб получился одномерный массив? C++
Целочисленный массив с размером 4*4 .Написать прогу , формирующую одномерный массив C++
Переписать произвольный одномерный массив в другой массив в обратном порядке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21786 / 10510 / 1705
Регистрация: 12.02.2012
Сообщений: 17,514
06.10.2012, 21:18     Одномерный массив #2
Вот работающий код:

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.h>
 
// Проверка, является ли отрезок 
// массива a[n1]-a[n2] палиндромом
 
int isPal(int *a, int n1, int n2)
{
    if (n1 > n2)
        return 1;
    else
        return (a[n1] == a[n2]) & isPal(a,n1+1,n2-1);
}
 
int main(int argc, char* argv[])
{
    int Arr[]={1,2,3,2,4,5,1,2,2,1,7,1,2,3,4,4,3,2,1,11};
 
    int i,j,l,n=sizeof(Arr)/sizeof(int);
    int iBeg=0,iEnd=0,Len=0;
 
    for (i=0; i < (n-1); i++)
        for (j=i+1; j < n; j++)
            if (isPal(Arr,i,j))
            { 
                l=j-i+1; // длина палиндрома
                if (l > Len) // если больше пред. максимума
                {
                    Len=l;  // запомним длину
                    iBeg=i; // запомним начало
                    iEnd=j; // запомним конец
                }
            }
 
     if (Len == 0) 
         cout << "No palyndroms!" << endl;
     else
     {
         cout << "The longest palyndrom is: " << endl;
         for (i=iBeg; i<=iEnd; i++)
             cout << Arr[i] << " ";
         cout << endl;
     }
 
    return 0;
}
rafiksaiti
1 / 1 / 0
Регистрация: 15.09.2012
Сообщений: 40
06.10.2012, 21:24  [ТС]     Одномерный массив #3
спасибо, буду разбираться.
Catstail
Модератор
 Аватар для Catstail
21786 / 10510 / 1705
Регистрация: 12.02.2012
Сообщений: 17,514
06.10.2012, 21:26     Одномерный массив #4
Обрати внимание на функцию isPal. Она рекурсивная.
Thinker
Эксперт C++
 Аватар для Thinker
4218 / 2192 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
06.10.2012, 21:50     Одномерный массив #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Catstail, вопрос на засыпку. Чем различаются функции
Ваша
C++
1
2
3
4
5
6
7
int isPal(int *a, int n1, int n2)
{
    if (n1 > n2)
        return 1;
    else
        return (a[n1] == a[n2]) & isPal(a,n1+1,n2-1);
}
и такая
C++
1
2
3
4
5
6
7
int isPal(int *a, int n1, int n2)
{
    if (n1 > n2)
        return 1;
    else
        return (a[n1] == a[n2]) && isPal(a,n1+1,n2-1);
}
а я бы так написал
C++
1
2
3
4
int Sym(int *a, int *b)
{
   return (a < b) ? (*a == *b) && Sym(a + 1, b - 1) : 1;
}
отвечу. если условие (a[n1] == a[n2]) будет ложным, то в случае операции && рекурсивный вызов тут же прекращается, в случае & рекурсивный вызов идет дальше, хотя уже известен результат. представьте массив из 1 000 000 элементов, первый и последний элементы которого не равны. проверка с && остановится при первом же вызове функции, c & проверка будет всех тестируемых элементов, то есть 500 000 рекурсивных вызовов.
Catstail
Модератор
 Аватар для Catstail
21786 / 10510 / 1705
Регистрация: 12.02.2012
Сообщений: 17,514
07.10.2012, 10:43     Одномерный массив #6
Цитата Сообщение от Thinker Посмотреть сообщение
то в случае операции && рекурсивный вызов тут же прекращается, в случае & рекурсивный вызов идет дальше
- да, правда Ваша. Я просто перепутал.
Yandex
Объявления
07.10.2012, 10:43     Одномерный массив
Ответ Создать тему
Опции темы

Текущее время: 13:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru