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

Задача "Максимальный подпалиндром" не могу поймать ошибку. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
danielgreen
Сообщений: n/a
26.12.2011, 19:34     Задача "Максимальный подпалиндром" не могу поймать ошибку. #1
Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево. Подпалиндромом данной строки называется последовательность символов из данной строки, не обязательно идущих подряд, являющаяся палиндромом. Например, HELOLEH является подпалиндромом строки HTEOLFEOLEH. Напишите программу, находящую в данной строке подпалиндром максимальной длины.

Формат входных данных:
Во входном файле находится строка длиной не более 100 символов, состоящая из заглавных букв латинского алфавита.

Формат выходных данных:
Выведите на первой строке выходного файла длину максимального подпалиндрома, а на второй строке сам максимальный подпалиндром. Если таких подпалиндромов несколько, то ваша программа должна вывести любой из них.

Пример
Входные данные:
HTEOLFEOLEH


Выходные данные:
7
HELOLEH

Сама задача тут.
Тут лежит exe файл, кто может потестите плизз, найдёте не рабочие тесты, киньте в ответы.

Код проги, если не лень разбираться:

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
#include<cstdio>
 
const int l = 1001;
int a[l][l];
char s1[l], s2[l], p[l];
 
int max (int i, int j)
{
   if (i > j)
       return i;
   else
       return j;
}
 
int len_str(int n)
{
for (int i = n; i >= 0; i--)
   for (int j = n; j >= 0; j--)
       {
           if ((s1[i] == '\0') || (s2[j] == '\0'))
               a[i][j] = 0;
           else
           {
               if (s1[i] == s2[j])
                   a[i][j] = a[i+1][j+1] + 1;
               else
                   a[i][j] = max (a[i+1][j], a[i][j+1]);
           }
       }
       return a[0][0];
}
 
void s_pal(int n)
{
   int i = 0, j = 0, k = 0;
   while (k < n)
   {
       if (a[i][j+1] == a[i][j])
           j++;
       else
       {
           if (a[i+1][j] == a[i][j])
               i++;
           else
           {
              p[k] = s1[i];
              k++;
              i++;
              j++;
           }
       }
   }
 
}
 
int main()
{
   int n, lp;
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
   n = 0;
   while (!feof(stdin))
   {
       s1[n] = getchar();
       n++;
   }
   s1[n-1] = '\0';
   for (int i = 0; i < n; i++)
       s2[n-i-2] = s1[i];
   s2[n-1] = s1[n-1];
   lp = len_str(n);
   for (int i = 0; i < n; i++)
   s_pal(lp);
   printf("%d\n", lp);
   printf("%s", p);
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2011, 19:34     Задача "Максимальный подпалиндром" не могу поймать ошибку.
Посмотрите здесь:

Задача: игра "Поймать парасёнка" C++
C++ Необработанное исключение в "0x76f015de" в "контрольная 1 задача 2.exe": 0xC0000005: Нарушение прав доступа при чтении "0x334e2c64"
C++ Элементарно. Но ошибку найти не могу. Вывод имени "Jim" на экран
C++ Найти ошибку в решении "Числа - палиндрома" (задача с acmp)
Не могу понять ошибку "C2043: недопустимый break". Задача: найти подстроку в строке C++
C++ Не могу найти ошибку "Простейший калькулятор"
C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку
Не могу убрать ошибку: "error LNK2001: неразрешенный внешний символ" C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KatyaFunny1995
0 / 0 / 0
Регистрация: 24.11.2015
Сообщений: 10
25.11.2015, 01:08     Задача "Максимальный подпалиндром" не могу поймать ошибку. #2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
Function F(i, j : Integer) : Integer;
    var Ch : Char; R1, R2 : Integer; k : byte;
    begin
        if Mat[i, j] = -1 then
        BEGIN
            k := j;
            while Inp[i] <> Inp[k] do dec(k);
            R1 := F(i + 1, j);
            if i <> k then R2 := F(i + 1, k - 1) + 2 else R2 := 1;
            if R1 > R2 then Mat[i, j] := R1 else Mat[i, j] := R2
        END;
        F := Mat[i, j]
    end;
- код с решения на паскале, может поможет.
Yandex
Объявления
25.11.2015, 01:08     Задача "Максимальный подпалиндром" не могу поймать ошибку.
Ответ Создать тему
Опции темы

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