#0
by Ненавижу 1С
Вынесу в отдельную тему Для символов L[1],L[2],...,L[K],R[1],R[2],...,R[K] строка считается правильной, если: 1. она пустая 2. может быть построена по правилам: 2.1. если S - правильная строка, то L[i]+S+R[i] - правильная 2.1. если S1, S2 - правильные строки, то S1+S2 - правильная Требуется: 1. Для произвольной строки определить, что она правильная 2. Для числа N определить число правильных строк длины 2*N
#1
by Ёпрст
ну вот: Сч=0;Сч2=0; Пока Найти(Стр,"")+Найти(Стр,"[]")>0 Цикл Пока Найти(Стр,"")>0 Цикл Стр = СтрЗаменить(Стр,"",""); сч=сч+1; КонецЦикла; Пока Найти(Стр,"[]")>0 Цикл Стр = СтрЗаменить(Стр,"[]",""); сч2=сч2+1; КонецЦикла; КонецЦикла; Если СтрДлина(Стр)>0 Тогда Сообщить("не правильная.."); Иначе Сообщить("Правильная"); КонецЕсли; Сообщить("Количество "+сч); Сообщить("Количество [] "+сч2);
#3
by Ёпрст
не вопрос: Стр = СокрЛП(с); сч=0; Для к =1 По СтрДлина(Стр) Цикл Символ = Сред(Стр,к,1); Если Символ="(" Тогда сч=сч+1; ИначеЕсли Символ = "["Тогда сч=сч+0.1; ИначеЕсли Символ = ")" Тогда Если (Цел(сч)=сч)и(сч>0) Тогда сч=сч-1; Иначе Прервать; КонецЕсли; ИначеЕсли Символ = "]" Тогда Если (Цел(сч)<>сч)и(сч>0) Тогда сч=сч-0.1; Иначе Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если СтрДлина(сч)>0 Тогда Сообщить("не правильная.."); Иначе Сообщить("Правильная"); КонецЕсли;
#7
by orefkov
1 элементарно. Считываем по символу из строки, если это L[i], заносим i в стек, если это R[i], проверяем, что на верхушке стека такое же i и выносим из стека, иначе выходим. Если дошли до конца строки, и стек пуст - строка правильная. А вот второе так сразу и не знаю, я больше прикладник, чем теоретик.
#8
by Ненавижу 1С
отлично, и проверка на то, что из стека можно вообще что либо достать (не пустой) при R[i] случай с K=1 тоже самое, только вместо стека используется только его счетчик заполненности
#9
by orefkov
Функция ПравильнаяПоследовательность(Поток, ЛевыеСимволы = "([{", ПравыеСимволы = ")]}") д = СтрДлина(Поток); Если д % 2 = 1 Тогда Возврат 0; КонецЕсли; стек = СоздатьОбъект("СписокЗначений"); г = 0; Для Номер = 1 По д Цикл с = Сред(Поток, Номер, 1); н = Найти(ЛевыеСимволы, с); Если н > 0 Тогда стек.ДобавитьЗначение(н); г = г + 1; Иначе н = Найти(ПравыеСимволы, с); Если н = 0 Тогда Возврат 0; КонецЕсли; Если г = 0 Тогда Возврат 0; КонецЕсли; Если н <> стек.ПолучитьЗначение(г) Тогда Возврат 0; КонецЕсли; стек.УдалитьЗначение(г); г = г - 1; КонецЕсли; КонецЦикла Возврат ?(г = 0, 1, 0); КонецФункции
#10
by Ненавижу 1С
ага, у меня на 8.1 Функция Тест(МояСтрока,ОткрывающиесяСкобки="([",ЗакрывающиесяСкобки=")]") Стек = Новый Массив; Для й=1 по СтрДлина(МояСтрока) Цикл Символ = Сред(МояСтрока,й,1); С = Найти(ЗакрывающиесяСкобки,Символ); Если С>0 Тогда Если Стек.Количество=0 Тогда Возврат Ложь; ИначеЕсли Сред(ОткрывающиесяСкобки,С,1)<>Стек[0] Тогда Возврат Ложь; Иначе Стек.Удалить; КонецЕсли; ИначеЕсли Найти(ОткрывающиесяСкобки,Символ)>0 Тогда Стек.Вставить(0,Символ); КонецЕсли; КонецЦикла; Возврат (Стек.Количество=0); КонецФункции
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- как связать программно создаваемое Поле ввода со значением табличной части?
- Как передать параметры в метод Записать() расширения управляемой формы?
- ЗУП. Больничный по уходу за ребенком
- Выгрузка объектов конфигурации по определенной подсистеме
- Падает буха 8.1 на SQL
- Как скопировать структуру?
- Перенос счета. Конвертация данных.
- ДБФ файл. Ругается на длину имени
- Не стартует автоматически Агент сервера 1С:Предприятия 8.1
- Управление бух. итогами не активно
- БП, Обороты счета по субконто корр. счетов
- Шаблон, актив документ
- Как средствами 1C проверить ping (Ping monitor)?
- Пересчет итогов для 1С 7.7 SQL
- СКД: Формирование отчёта в СКД программно
- УПП В регистр "Затраты на выпуск продукции" пишется только количество, без стоимости
- Запрет непосредственного удаления объектов
- Зависание ПК, касперский KIS 2010.0.0.463
- Выбрать 5 самых продаваемых позиций по каждой номенклатурной группы.
- КТо знаком с Визуал Студио 2008 (Веб Деловепер) не может в проект SQL добавить