Помощь - Поиск - Пользователи - Календарь
Полная версия: Вилли и Дилли
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Cheburashka
В доме Вилли установили скоростной лифт новой экспериментальной модели. В этом лифте кнопки с номерами этажей заменены двумя другими кнопками. При нажатии на первую кнопку лифт поднимается на один этаж вверх, а при нажатии на вторую – опускается на один этаж вниз.

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

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

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

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

Cheburashka
Спасибо!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.