Скобочные последовательности
примеры:
N=3 K=1 ((()))
N=3 K=2 (()())
N=3 K=3 (())()
N=3 K=4 ()(())
N=3 K=5 ()()()
N=3 K=6 Error
1. K надо самому вводить или как?
2. Эти скобочные последовательности должны быть уже где-то сохранены, или ты сам должен ввести эту скоб. послед., а прога должна проверить правильно ли ты ее ввел?
например:
(()) - правильно
(()( - неправильно
У меня пару вопросов:
1. K надо самому вводить или как?
2. Эти скобочные последовательности должны быть уже где-то сохранены, или ты сам должен ввести эту скоб. послед., а прога должна проверить правильно ли ты ее ввел?
например:
(()) - правильно
(()( - неправильно
Вводится только N и K. А прога должна вывести К-ую правильную скобочную последовательность из N пар скобок.
Вводится только N и K. А прога должна вывести К-ую правильную скобочную последовательность из N пар скобок.
с буквой N тебе надо на какой-нибудь форум по математике, чтобы кто-нибудь придумал тебе формулу которая будет считать количество скоб. послед. при определенном N (я в математике не силен, помочь не могу)
Если я правильно понял, то эти послед. уже где-то сохранены, если я прав, то я не вижу никаких серьезных проблем чтобы вывести на экран K-ую ск.пос., ну если не знаешь, то в этом тебе поможет функция Write();
Помогите написать программу, которая должна выводить К-ую правильную скобочную последовательность из N пар скобок. Если такой последовательности не существует (К больше количества правильных скобочных последовательностей из N пар скобок), программа выводит Error
примеры:
N=3 K=1 ((()))
N=3 K=2 (()())
N=3 K=3 (())()
N=3 K=4 ()(())
N=3 K=5 ()()()
N=3 K=6 Error
Вот:
uses
Crt;
var
N, K: Integer;
function MakeBrackets(N, K: Integer): string;
var
i: Integer;
s, s1: string;
begin
if (K = 1) then begin
s := '';
for i := 1 to N do
s := s + '(';
for i := 1 to N do
s := s + ')';
end else begin
s := MakeBrackets(N, K - 1);
s1 := '';
for i := 1 to N do
s1 := s1 + '()';
if (s = s1) or (s = 'Error') then
s := 'Error'
else begin
i := N * 2;
while (Copy(s, i, 3) <> '())') do
Dec(i);
Delete(s, i, 2);
repeat
Inc(i);
until (i > Length(s)) or (s = ')');
Insert('()', s, i);
end;
end;
MakeBrackets := s;
end;
begin
ClrScr;
Write('Введите N:');
ReadLn(N);
Write('Введите K:');
ReadLn(K);
WriteLn(MakeBrackets(N, K));
end.
Круто, кто-то сам делает, а кто-то просто ищет ответ к задаче на форуме, мда... Жалко только, что я уже ее решил, терь не воспользуешься((
И не стыдно??? Задача наипростейшая!!! Там есть гораздо сложней, тоже будешь за помощью обращаться? Ну и какое тебе после этого обучение? Ты ж там будешь 1/4 понимать :) И то еле-еле
Это же задачи с olympiads.ru "Вступительное задание ЛКШ"...
Круто, кто-то сам делает, а кто-то просто ищет ответ к задаче на форуме, мда... Жалко только, что я уже ее решил, терь не воспользуешься((
И не стыдно??? Задача наипростейшая!!! Там есть гораздо сложней, тоже будешь за помощью обращаться? Ну и какое тебе после этого обучение? Ты ж там будешь 1/4 понимать :) И то еле-еле
Спасибо за заботу...
Увы... Мне уже поздно в ЛКШ.(по возрасту) Оттуда я решил все задачи кроме этой и последней(если тебе не тяжело - направь на путь истинный)... Просто последовательности, и задачи на комбинаторику мне даются тяжело...
Спасибо за заботу...
Увы... Мне уже поздно в ЛКШ.(по возрасту) Оттуда я решил все задачи кроме этой и последней(если тебе не тяжело - направь на путь истинный)... Просто последовательности, и задачи на комбинаторику мне даются тяжело...
Я сейчас сам бьюсь над последней :) Думаю ДО УТРА сделать... Я про вступительное задание узнал 4-5 дней назад, теория далась проще(кроме первого задания), практика показала, что задачи на графы(задача 8 в задании) не мои... А вот П-9 вполне неплохо, сегодня вечером начал решать
uses
Crt;
var
N, K: Integer;
function MakeBrackets(N, K: Integer): string;
var
i: Integer;
s, s1: string;
begin
if (K = 1) then begin
s := '';
for i := 1 to N do
s := s + '(';
for i := 1 to N do
s := s + ')';
end else begin
s := MakeBrackets(N, K - 1);
s1 := '';
for i := 1 to N do
s1 := s1 + '()';
if (s = s1) or (s = 'Error') then
s := 'Error'
else begin
i := N * 2;
while (Copy(s, i, 3) <> '())') do
Dec(i);
Delete(s, i, 2);
repeat
Inc(i);
until (i > Length(s)) or (s = ')');
Insert('()', s, i);
end;
end;
MakeBrackets := s;
end;
begin
ClrScr;
Write('Введите N:');
ReadLn(N);
Write('Введите K:');
ReadLn(K);
WriteLn(MakeBrackets(N, K));
end.
Можешь сказать по какому алгоритму ты делал эту задачу? А то я не могу понять...