Помощь - Поиск - Пользователи - Календарь
Полная версия: задача "театр"
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи > Задачи на заказ
Triplet
Дана задача:
Цитата
В театре N мест, пронумерованных целыми числами от 1 до N. Некоторые из зрителей опоздали на спектакль, поэтому после третьего звонка те зрители, которые имели билеты на неудобные места, пересели на более удобные. Опоздавшие зрители, которые пришли уже после третьего звонка, садились на первое попавшееся свободное место.В антракте один из опоздавших зрителей решил сесть на свое место. Если его место до этого было занято, то тот, кто там сидел, пересаживался на свое место. Если и там кто-то уже сидел, то и этот зритель также вынужден был вернуться на свое место. И так далее.Поскольку в театр попали только зрители, имевшие на руках билеты, то начавшийся в антракте процесс пересаживания зрителей обязательно заканчивался. Необходимо посчитать, сколько человек в результате такого пересаживания были вынуждены поменять на свои места.Требуется написать программу, которая вычисляет количество зрителей, поменявших свои места из-за опоздания одного зрителя.
Технические требования:
Входной файл: INPUT.TXT
Выходной файл: OUTPUT.TXT
Формат входных данных:
Входной файл INPUT.TXT состоит из трех строк. В первой строке содержится целое число N ( 1 <= N <= 30000) - количество мест в зале.
Вторая строка содержит последовательность из N целых чисел, разделенных пробелами, где первое число определяет номер места в билете у зрителя, который занял место с номером 1, второе - номер места в билете у зрителя, который занял место с номером 2, и так далее. Если место было свободно, то соответствующее число рано 0.
В третьей строке содержится одно число - номер места в билете у опоздавшего зрителя, который в антракте решил пересесть на свое место.

решение:
Program tsk_4; { "Театр" }
const NMax = 30000;
var N, k, k0, count: integer;
su: array[1..NMax] of integer;
{ su[i] - номер человека, сидящего на i-м месте }
f: text;
begin
Assign( f, 'input.txt' );
Reset ( f );
ReadLn( f, N );
for k:= 1 to N do Read( f, su[k] );
ReadLn( f );
ReadLn( f, k );
Close ( f );
k0:=k;
if su[k] = k then count := 0
else begin
count := 1;
while (su[k] <> 0) and (su[k] <> k0) do begin
{ на k-м месте сидит человек номер su[k] }
inc(count);
k := su[k];
end;
end;
Assign( f, 'output.txt' );
Rewrite( f );
WriteLn( f, count );
Close( f );
end.

Необходимо пересадку изобразить графически, т.е. сначала показать зал с сидящими, а потом пронумерованными стрелочками изобразить пересадку зрителей.

М
Применение правильных тегов обязательно даже в Задачах на Заказ! Lapp

arhimag
Цену может назовешь?
мисс_граффити
и срок
Lapp
В силу исключительной простоты задания предлагаю цену от 4 долл (100р) и срок один день..
Triplet, если ты согласна с условиями - контактируй с одним из отметившихся выше через личные сообщения.

При добавлении дополнительных условий цена и сроки могут меняться.

Участников соглашений прошу помнить об обязательной оплате через Форум и отчисления Форуму. Спасибо.

ps
Triplet, если хочешь поучаствовать в дискуссии и разобраться, у тебя остается возможность попросить модераторов перенести тему в Задачи.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.