![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| Naruto05 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.4.2008 Репутация: нет Всего: нет |
здр всем кто читает. У меня есть задачка:
Так вот, дана строка, состоящая из символов '?' и '(' и ')'. Требуется вывести все варианты преобразованной строки, где вместо вопросов стоят '(' или ')' и полученное скобочное выражение правильное. например: (??) ответ: (()) ()() Добавлено через 1 минуту и 59 секунд А, кстати, длина строки составляет 254 символа ну вот я её решал рекурсивным перебором, но она тяжело работала уже на 40-50 символах. |
|||
|
||||
| Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Вообщем здесь изначально нужен стек, для проверки правильности расстановки скобочной последовательности.
Вот пример:
Ну а для реализации твоей задачи тебе нужна функция проверки количества '?' на четность и вставить её в обект. |
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
(()(?)?) - количество "вопросов" - парное, и что мне это дает? Можно же сделать: (()())(), что будет корректно, а можно: (()(()() - что ошибочно... Тогда к чему эта проверка на четность? Просто так? Naruto05, показывай, как ты делал, у меня на 80 символах программа (с рекурсией) отработала за 100 ms... |
|||
|
||||
| Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Начнем от противного: а если их 3,5,7, (n mod 2 <>0), то тогда что?! тупо вывод 'количество знаков '?' не четное' ?
Согласись ведь каждой открывающей скобке должна соответствовать закрывающая...... Просто посмотри в код: там идет проверка правильности написания скобочной последовательности...... |
|||
|
||||
| Naruto05 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 26.4.2008 Репутация: нет Всего: нет |
var
b:array[1..2] of char; c:array[1..255] of byte; s,s1:string; g,k,l,m,n,p:integer; f:text; procedure output(qw:boolean); var m:byte; begin if qw then begin writeln(f); for m:=1 to n-1 do write(f,s[m]); end else begin write(f,'NO');halt; end; end; procedure input; begin assign(f,'r953.in');reset(f); read(f,s); close(f); assign(f,'r953.out');rewrite(f); if length(s) mod 2=1 then output(false); s1:=s; writeln(f,'YES'); s:=s+'?';n:=length(s);p:=0;l:=0;g:=0; for k:=1 to n do if s[k]='?' then begin inc(p);c[p]:=k; end else if s[k]='(' then inc(l) else inc(g); b[1]:='(';b[2]:=')'; end; procedure solve(x:byte); var i,j:byte; begin if (l<g) then exit; if (x=p)and(l=g)and(s[1]='(')and(s[n-1]=')') then output(true); if x=p then exit; for i:=1 to 2 do begin if i=1 then inc(l) else inc(g); s[c[x]]:=b[i]; solve(x+1); if i=1 then dec(l) else dec(g); end; s[c[x]]:='?'; end; begin writeln('-------------------------'); input; solve(1); close(f); end. Ну вот. ну она не работает, на некоторых выражениях она ошибается. |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |