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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2009, 00:30   #1
HellForce
 
Регистрация: 05.05.2009
Сообщений: 7
По умолчанию Скобочные выражения(язык C)

Правильное скобочное выражение получается из некоторого правильного математического выражения, содержащего круглые скобки, вычёркиванием всех знаков, кроме круглых скобок. Постройте все правильные скобочные выражения длиной 10, то есть те, которые содержат по 5 левых и по 5 правых круглых скобок.
HellForce вне форума Ответить с цитированием
Старый 05.05.2009, 07:04   #2
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

Я что-то не понял. На экране должно такое появляться?
()()()()()
()()()(())
()()(()())
()()((()))
()(()(()))
()((()()))
()(((())))
(()((())))
((()(())))
(((()())))
((((()))))
(()()()())
((()()()))
()(()()())
(())(()())
(())((()))
Сергей089 вне форума Ответить с цитированием
Старый 06.05.2009, 00:29   #3
HellForce
 
Регистрация: 05.05.2009
Сообщений: 7
По умолчанию

Именно...я просто долго сидел над задачей...и ничего нее надумал...
HellForce вне форума Ответить с цитированием
Старый 06.05.2009, 19:33   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
#include <stdio.h>

char str[11];

void find(int s, int l)
{
	if (l != 0)
	{
		str[s] = '(';
		str[s + l - 1] = ')';
		find(s + 1, l - 2);
		if (l > 2)
		{
			str[s] = '(';
			str[s + 1] = ')';
			find(s + 2, l - 2);
		}
	}
	else
		puts(str);
}

int main()
{
	find(0, 10);
	getchar();
}
Somebody вне форума Ответить с цитированием
Старый 07.05.2009, 01:06   #5
HellForce
 
Регистрация: 05.05.2009
Сообщений: 7
По умолчанию

ммм...пасиб огромное...а можно ещё ход мыслей пож...
HellForce вне форума Ответить с цитированием
Старый 08.05.2009, 21:51   #6
HellForce
 
Регистрация: 05.05.2009
Сообщений: 7
По умолчанию

хэй ))))))
HellForce вне форума Ответить с цитированием
Старый 08.05.2009, 23:42   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Если так не понятно, не уверен, что после объяснения станет понятнее.
void find(int s, int l) - перебрать все варианты для части строки, начинающейся с s, длины l. А тут 2 варианта (если l == 2, то они совпадают) - это "()что-то" и "(что-то)". А что-то перебирается с помощью этой же find.
Somebody вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Регулярные выражения ACE Valery PHP 5 14.10.2009 11:37
Сокращение выражения Simon..14 Общие вопросы C/C++ 4 25.01.2009 13:33
Арифметические выражения spirit0k Общие вопросы C/C++ 0 26.10.2008 18:06
Регулярные выражения Adamant Общие вопросы C/C++ 1 26.11.2007 19:44