Количество скобок |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Количество скобок |
Metrax |
29.10.2006 13:06
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Artem Репутация: 0 |
И так , условие: в файле iekavas.in хранится последовательность скобок, например )()())( записать в файл iekavas.out сколько скобок лишних (например 3(смотрите выше)) мой код:
program iekavas; ето самое последнее мое решение, вродь лучше и ниможет быть, почему непроходит по времени????? напишите свои решегия... заранее благодарен Сообщение отредактировано: volvo - 2.11.2006 16:50 |
volvo |
29.10.2006 13:28
Сообщение
#2
|
Гость |
Во-первых, как ты думаешь, что будет в строке ST после окончания вот этого цикла:
while not eof(f) do? А во-вторых: в файле *.IN (если он текстовый) последняя строка должна быть пустая, т.е. если после введенной тобой строки не был нажат Enter, то Паскаль будет делать проблемы... Тегами, кстати, тоже пользуйся... |
Гость |
29.10.2006 20:37
Сообщение
#3
|
Гость |
Во-первых, как ты думаешь, что будет в строке ST после окончания вот этого цикла: while not eof(f) do? А во-вторых: в файле *.IN (если он текстовый) последняя строка должна быть пустая, т.е. если после введенной тобой строки не был нажат Enter, то Паскаль будет делать проблемы... Тегами, кстати, тоже пользуйся... По окончанию цикла в строке будет содержимое файла, если нет то в чем ошибка????? ok можно изменить на writeln(f1,length(ST)) ??????? |
Michael_Rybak |
30.10.2006 2:45
Сообщение
#4
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
ето самое последнее мое решение, вродь лучше и ниможет быть, почему непроходит по времени????? напишите свои решегия... заранее благодарен Твое решение имеет квадратичную сложность. Ты все делаешь одним линейным циклом, но процедура delete работает тоже за линейное время; меняя строку (потенциально на каждой итерации), ты замедляешься до квадрата. На самом деле тебе строку менять не надо. Суть твоего алгоритма: идем слева направо, как только нашли "()" - удаляем из строки, откатываем на 1 позицию влево, и продолжаем поиск. То же самое можно сделать несколько по-другому. Идем слева направо. Храним счетчик количества открытых скобок, и счетчик "лишних" скобок. В начале оба равны 0. Встретив открытую скобку, увеличиваем счетчик открытых. Встретив закрытую, проверяем счетчик открытых. Если он больше нуля, уменьшаем его на 1 (нашли "()"). Если же он равен нулю, это значит, что встреченная закрывающая скобка - лишняя. Увеличиваем счетчик "лишних". Дойдя до конца строки, добавляем значение счетчика открытых скобок к счетчику "лишних" (потому что эти открытые так и не закрылись). Т.е. я не менял идеи твоего алгоритма, но перешел от изменения строки к запоминанию промежуточных результатов. Пробуй, должно пройти. |
volvo |
30.10.2006 8:45
Сообщение
#5
|
Гость |
Цитата По окончанию цикла в строке будет содержимое файла, если нет то в чем ошибка? ВСЕГО файла? Ошибаешься... Последняя строка (группа символов, после последнего пробела/табуляции)... А если в файле будет БОЛЬШЕ одной строки?Цитата Т.е. я не менял идеи твоего алгоритма, но перешел от изменения строки к запоминанию промежуточных результатов. Пробуй, должно пройти. Кстати, Metrax, у нас когда-то даже конкурс был на программу, проверяющую правильность расстановки скобок... Так что в Поиск (ссылка - у меня в подписи)... |
Текстовая версия | 31.05.2024 19:18 |