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

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

Восстановить пароль Регистрация
 
rafiksaiti
1 / 1 / 0
Регистрация: 15.09.2012
Сообщений: 40
06.10.2012, 20:26     Одномерный массив #1
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
- самую длинную подпоследовательность элементов массива, которая является палиндромом.

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

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

Одномерный массив вещественных чисел R75 содержит данные о росте группы студентов. Массив заполнить значениями путем ввода с клавиатуры. Вычислить с C++
Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. C++
Массив: Построить из динамического одномерный массив,каждый элемент, которого равен сумме элементов одной строки исходной матрицы. C++
Одномерный массив. Создать массив Х суммы среднеарифметического элементов массива А с каждым элементом массива А C++
Одномерный массив (элементы с четными индексами переписать в массив z.в массиве z поменять местами максимальный и минимальный элементы) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
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
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
06.10.2012, 21:26     Одномерный массив #4
Обрати внимание на функцию isPal. Она рекурсивная.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 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
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
07.10.2012, 10:43     Одномерный массив #6
Цитата Сообщение от Thinker Посмотреть сообщение
то в случае операции && рекурсивный вызов тут же прекращается, в случае & рекурсивный вызов идет дальше
- да, правда Ваша. Я просто перепутал.
Yandex
Объявления
07.10.2012, 10:43     Одномерный массив
Ответ Создать тему
Опции темы

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