Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Вилли и Дилли

Автор: Сергей Меркурьев 13.05.2009 19:32

В доме Вилли установили скоростной лифт новой экспериментальной модели. В этом лифте кнопки с номерами этажей заменены двумя другими кнопками. При нажатии на первую кнопку лифт поднимается на один этаж вверх, а при нажатии на вторую – опускается на один этаж вниз.

Младшему брату Вилли Дилли очень нравится кататься на новом лифте. Он катается на нём до тех пор, пока не побывает на каждом из этажей хотя бы по одному разу. После этого Дилли довольный возвращается домой.

Зная порядок, в котором Дилли нажимал на кнопки лифта, попробуйте определить общее количество этажей в доме Вилли и Дилли.

Входные данные

Первая строка входного файла INPUT.TXT содержит последовательность нажатий на кнопки лифта. Символ «1» означает, что была нажата первая кнопка, а символ «2» – что была нажата вторая кнопка. Символы «1» и «2» не разделены пробелами. Количество нажатий не превосходит 100. Гарантируется, что лифт никогда не опускался ниже первого и не поднимался выше последнего этажа.

Выходные данные

В выходной файл OUTPUT.TXT следует вывести одно число – количество этажей в доме Вили и Дилли.

Парочка примеров к задаче:
1) 11 ---> 3
2) 21212 ---> 2
3) 1221221221221 ---> 6

Вот код программы, который я сделал)

program N_296;
var i,j,k,n,m:longint;
S:string;
Begin
assign (input,'input.txt');
reset (input);
assign (output,'output.txt');
rewrite (output);
Read (S);
n:=1;
k:=1;
For j:=1 to length(S) do
Begin
n:=n+1;
If m=length(S) then break;
For i:=1 to length(S) do
Begin
If S[i]='1' then Begin
k:=k+1;
If k-1=length(S) then m:=i;
End
else Begin
k:=k-1;
If k-1=length(S) then m:=i;
End;
If k<=0 then Begin
k:=n;
break;
End;
End;
End;
Write (k);
End.


Добавлено через 1 мин.
Помогите найти ошибку или просто разъясните мне эту задачу)

Автор: Lapp 13.05.2009 20:25

Извини, в твоем решении я до конца разбираться не стал. Нельзя так переусложнять простые вещи..
Ты представь себе сам процесс. Что в нем существенно? Существенно, какие этажи были крайние.
Текущий этаж легко проследить. Дальше найди максимум и минимум. Вычти второе из первого, накинь один (лифтеру на чай)) - и все!
Ты и сам мог бы все это осуществить, но я тебе приведу полное решение с единственной целью: посмотри на правильное форматирование программы и постарайся следовать этим правилам. Это тебе сильно поможет.

var
i,n,max,min: integer;
S: string;

begin
assign (input,'input.txt');
reset (input);
assign (output,'output.txt');
rewrite (output);
Read (S);
n:=0; // current level, counting from the start level
max:=0;
min:=0;
for i:=1 to length(S) do begin
if S[i]='1' then Inc(n) else Dec(n);
if n>max then max:=n else if n<min then min:=n
end;
Write (max-min+1)
end.


Автор: Сергей Меркурьев 13.05.2009 22:51

Спасибо!