Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2010, 06:52   #1
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
Восклицание Полный перебор выражения

Здравствуйте, не получается составить все возможные выражения из данных скобок ((((())))) т.е. Нужно составить все возможные выражения каким образом можно этого достичь ?
Alex_sim вне форума Ответить с цитированием
Старый 21.05.2010, 09:11   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Вам же в Вашей прошлой теме уже всё растолковали. Разве не так?!

2) Если не заморачиваться с оптимизацией, то я бы предложил решить задачу "в лоб" - путём ПОЛНОГО перебора всех вариантов с контролем конечной полученной строки на правильность скобок.
Т.о. алгорим простой.
Задаём исходный набор.
Проверяем, что он количество отрывающих скобок в наборе = количеству закрывающих. Если нет - Сообщение о невозможности составления и выход.

в цикл:
- получаем очередную перестановку (вариант).
- Проверяем, если она проходит проверку на валидность, то выводим этот вариант.

всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.05.2010, 12:30   #3
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Вы меня не поняли так как у меня 10 скобок т. е. 5 справа 5 слева , значит у нас возможных вариантов 2 в 10 степени = 1024. Как составить эти выражения ?
Alex_sim вне форума Ответить с цитированием
Старый 21.05.2010, 13:45   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да, Вы правы. я Вас не понял.
немного сбили с толку скобки.
Такой вариант
)))))((((
у Вас считается допустимым?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.05.2010, 14:11   #5
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да, Вы правы. я Вас не понял.
немного сбили с толку скобки.
Такой вариант
)))))((((
у Вас считается допустимым?
я переделал проверку с этим все ок, мне нужно другое как составить все выражения со скобками 5 на 5??как я понял создаем цикл и нужно пребрать ВСЕ возможные выражения.Как эти выражения сосставить??? вот в чем вопрос не в проверке выражения а в их составлении?

Последний раз редактировалось Alex_sim; 21.05.2010 в 15:12.
Alex_sim вне форума Ответить с цитированием
Старый 22.05.2010, 06:45   #6
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Поясните пожалуйста как это сделать , код совсем не нужен расскажите на словах так понятнее . . .
Alex_sim вне форума Ответить с цитированием
Старый 22.05.2010, 20:32   #7
Alex_sim
Форумчанин
 
Аватар для Alex_sim
 
Регистрация: 18.02.2010
Сообщений: 164
По умолчанию

Вот например у нас есть открытая и закрытая скобка т.е. *Будет тоже самое если 1 и 0 , например дано выражение длины 2 , начинаем перебирать : 00, 01 , 10, 11 . Все , а как это сделать со скобками?Сам процесс за программирования не понятен со скобками !
Alex_sim вне форума Ответить с цитированием
Старый 22.05.2010, 23:49   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пример реализации на Pascal через рекурсию.
Код:
procedure ShowVariant(s : string; a, b : integer);
begin
  if (a=0) and (b=0) then begin Writeln(s); Exit; end;
  if a>0 then ShowVariant(s+'(',a-1,b);
  if b>0 then ShowVariant(s+')',a,b-1);
end;

begin
  ShowVariant('',5,5);
end.
p.s. Это ПОЛНЫЙ текст работающей программы!

p.p.s.
а вот на С# (Вам же вроде бы код под .NET нужен):
Код:
	class Program
	{
		public static void ShowVariant(string s, int a, int b)
		{
			if ((a==0) && (b==0) ) {
				Console.WriteLine(s);
				return;	}
			if (a>0) ShowVariant(s+"(",a-1,b);
			if (b>0) ShowVariant(s+")",a,b-1);
		}
 
		public static void Main(string[] args)
		{
			ShowVariant("",3,3); 
		}
	}

Последний раз редактировалось Serge_Bliznykov; 23.05.2010 в 00:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.05.2010, 09:33   #9
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да, Вы правы. я Вас не понял.
немного сбили с толку скобки.
Такой вариант
)))))((((
у Вас считается допустимым?
на этот вопрос вы так и не ответили, так является допустимым или нет, это повлияет на составление вариантов
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 24.05.2010, 09:50   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mrChester
на этот вопрос вы так и не ответили, так является допустимым или нет, это повлияет на составление вариантов
mrChester, это Вы мне?!

Да теперь это не проблема. Я же говорю, неоптимально, но "в лоб" - перебираем все варианты, и достаточно поставить проверку на валидность, перед выводом очередного варианта, как программа будет полностью закончена:
Код:
if ((a==0) && (b==0) ) {
  if (isValid(s))
   { Console.WriteLine(s); }
				return;
}
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Приходит не полный ответ Shouldercannon Общие вопросы Delphi 3 12.03.2010 21:45
полный путь tae1980 Microsoft Office Excel 7 08.05.2009 10:46
Полный перебор или есть другие варианты? androidvsu Помощь студентам 8 12.03.2009 14:07
Полный венигрет !!! MaxZoa Microsoft Office Excel 5 17.04.2008 09:28
Полный аминь AtomX Общие вопросы Delphi 4 25.12.2006 14:33