Материалы
Задание
В кассу на почте выстраивается очередь. Пока кассир обслуживает одного клиента, в очередь подходят еще трое. На обслуживание одного клиента уходит K секунд.
Кассир работает ровно T часов, потом идет обедать. Определите, сколько клиентов останется в очереди к началу обеда? Кто будет находится на кассе а начало обеда? Какой id будет у клиента, который окажется последним в очереди к началу обеда?
Формат входных данных
на ввод подаются сперва K - количество секунд на обслуживание одного клиента, затем T - время работы кассира в часах.
Формат выходных данных
В первой строчке вывести количество клиентов в очереди.
Во второй строчке вывести номер клиента, который окажется в начале очереди.
В третьей строчке вывести номер клиента, который окажется в конце очереди.
Клиенты нумеруются по порядку, начиная с 1.
Разбор задания
В цикле будем отсчитывать время работы кассира шагами по K секунд, пока оно будет меньше чем введенное значение T.
На каждой итерации цикла в очередь будут подходить три человека, а обслуживаться - один. Значит на каждой итерации нам следует добавить три элемента в очередь и удалить один, стоящий первым. При этом номер добавляемого клиента каждый раз будет увеличиваться на 1.
По окончании времени работы, выведем номер, хранящийся по указателю на первый и последний элемент.
Подсчитаем количество элементов в очереди и выведем его.
{Процедура добавления элемента в очередь}
Клиенты нумеруются по порядку, начиная с 1.
Разбор задания
В цикле будем отсчитывать время работы кассира шагами по K секунд, пока оно будет меньше чем введенное значение T.
На каждой итерации цикла в очередь будут подходить три человека, а обслуживаться - один. Значит на каждой итерации нам следует добавить три элемента в очередь и удалить один, стоящий первым. При этом номер добавляемого клиента каждый раз будет увеличиваться на 1.
По окончании времени работы, выведем номер, хранящийся по указателю на первый и последний элемент.
Подсчитаем количество элементов в очереди и выведем его.
{Процедура добавления элемента в очередь}
{Объявление типа очередь}
Type
PQueue = ^Queue;
Queue = record
Data : integer;
Next : PQueue;
end;
{Процедура добавления элемента в очередь}
Procedure AddElement(Var BeginQ, EndQ : PQueue; c : integer);
Var
u : PQueue;
Begin
new(u);
u^.Data := c;
u^.Next := Nil;
if BeginQ = Nil {проверяем, пуста ли очередь}
then
BeginQ := u {ставим указатель начала очереди на первый созданный элемент}
else
EndQ^.Next := u; {ставим созданный элемент в конец очереди}
EndQ := u; {переносим указатель конца очереди на последний элемент}
End;
Type
PQueue = ^Queue;
Queue = record
Data : integer;
Next : PQueue;
end;
{Процедура добавления элемента в очередь}
Procedure AddElement(Var BeginQ, EndQ : PQueue; c : integer);
Var
u : PQueue;
Begin
new(u);
u^.Data := c;
u^.Next := Nil;
if BeginQ = Nil {проверяем, пуста ли очередь}
then
BeginQ := u {ставим указатель начала очереди на первый созданный элемент}
else
EndQ^.Next := u; {ставим созданный элемент в конец очереди}
EndQ := u; {переносим указатель конца очереди на последний элемент}
End;
{Процедура удаления элемента из очереди}
procedure RemoveElement(Var BeginQ, EndQ : PQueue);
Var
u, v : PQueue;
Begin
u := BeginQ;
if BeginQ = Nil {проверяем, пуста ли очередь}
then
writeln('Очередь пуста')
else
begin
u:=BeginQ;
BeginQ := BeginQ^.Next;
dispose(u);
if BeginQ = nil then EndQ := nil;
end;
End;
Домашнее задание
В кассу на почте выстроилась очередь. Пока кассир обслуживает одного клиента, в очередь подходят еще трое. На обслуживание одного клиента уходит K секунд.
Кассир работает ровно T часов, потом идет обедать. Определите, сколько клиентов останется в очереди к началу обеда? Кто будет находится на кассе а начало обеда? Какой id будет у клиента, который окажется последним в очереди к началу обеда?
Формат входных данных
на ввод подаются сперва K - количество секунд на обслуживание одного клиента, затем T - время работы кассира в часах.
После этого начинают вводится id клиентов пока не кончится время. (id - строка из букв латинского алфавита и цифр длиной не более 5 символов)
После этого начинают вводится id клиентов пока не кончится время. (id - строка из букв латинского алфавита и цифр длиной не более 5 символов)
Формат выходных данных
В первой строчке вывести количество клиентов в очереди.
Во второй строчке вывести id клиента, который окажется в начале очереди.
В третьей строчке вывести id клиента, который окажется в конце очереди.
begin
ОтветитьУдалитьread (K,T);
n:=T*3600;
N:=N div K;
dd:=1;
E:=nil;
B:=nil;
for i:=1 to n do begin
add(B,E,dd);
add(B,E,dd);
add(B,E,dd);
remove(B);
dd:=dd+3;
end;
s:=e-b;
writeln (s+1);
writeln (b^.data);
writeln (e^.data);
readln(k);
end.
var t,i,k,a,dd,l,s:integer; //tatarinzev
ОтветитьУдалитьvar bq, eq:Plist;
begin
Readln(k,t);
t:=t*3600;
a:=t div k;
bq:=nil;
eq:=nil;
dd:=1;
for i:=1 to a do begin
for l:=1 to 3 do
add(bq,eq,dd);
remove(bq);
dd:=dd+3;
end;
s:=eq-bq;
writeln(s);
writeln(bq^.data);
writeln(eq^.data);
readln();
end.
Type
ОтветитьУдалитьPList = ^List;
List = record
Data : integer;
Next : PList;
end;
Procedure AddElement(Var BeginQ, EndQ : PList; c : integer);
Var
u : PList;
Begin
new(u);
u^.Data := c;
u^.Next := Nil;
if BeginQ = Nil
then
BeginQ := u
else
EndQ^.Next := u;
EndQ := u;
End;
procedure RemoveElement(Var BeginQ, EndQ : PList);
Var
u, v : PList;
Begin
u := BeginQ;
if BeginQ = Nil
then
writeln('Очередь пуста')
else
begin
u:=BeginQ;
BeginQ := BeginQ^.Next;
dispose(u);
end;
End;
var k,t,i,w,q:integer; B,E:Tlist
begin
writeln(k);
writeln(t);
w:=t*3600;
while k<w do begin
end. Москаленко Александр 11б
begin
ОтветитьУдалитьreadln(k,t);
n:=0;
s:=k;
new(beginq);
new(endq);
beginq^.data:=0;
beginq^.next:=nil;
endq^.data:=0;
endq^.next:=nil;
while t>s do begin
for i:=1 to 3 do
adde(beginq,endq,n+i);
reme(beginq);
n:=n+3;
s:=s+k;
end;
writeln(beginq^.data-1);
writeln(endq^.data+3);
readln();
end.
begin
ОтветитьУдалитьreadln(k);
readln(t);
t:=t*3600;
n:=0;
s:=k;
new(beginq);
new(endq);
beginq^.data:=0;
beginq^.next:=nil;
endq^.data:=0;
endq^.next:=nil;
while t>s do
begin
for i:=1 to 3 do
addel(beginq,endq,n+i);
delel(beginq);
n:=n+3;
s:=s+k;
end;
writeln(beginq^.data-1);
writeln(endq^.data+3);
readln
end.
Type PList:^TList;
ОтветитьУдалитьTList = record
data:integer;
Next:PList;
var BeginQ, EndQ, tmp:PList;
procedure AddElement (var beginQ, EndQ:PList, d:integer)
begin
new(tmp);
tmp^.data := d;
tmp^.next := nil;
if beginQ=nil then
begin
BeginQ := tmp;
EndQ := tmp;
end;
else begin
EndQ^.next := d;
EndQ := tmp;
end ;
end;
procedure remoE (var BeginQ: PList);
var tmp;PList;
begin
if BeginQ><nil then
begin
tmp := beginq;
BeginQ := tmp^.next;
Dispose(tmp);
begin
end.
begin
ОтветитьУдалитьreadln(k,t);
t:=3600*t;
n:=0;
beginq.data:=0;
beginq:=nil;
endq.data:=0;
endq.next:=nil;
while t>k do begin
for i:=1 to 3 do
AddElement(beginq,endq,n+i);
remoelement(beginq) ;
n:=n+3;
s:=s+k;
end;
writeln(beginq.data);
writeln(endq.data) ;
readln()
begin
ОтветитьУдалитьwrite('k=');
readln(k);
write('t=');
readln(t);
n:=t*3600;
n:=n div k;
for i:= 1 to n do
begin
addelement(a,b,c);
inc(c);
addelement(a,b,c);
inc(c);
addelement(a,b,c);
inc(c);
delelement(a);
begin
ОтветитьУдалитьwrite('k=');
readln(k);
write('t=');
readln(t);
n:=0;
s:=k;
new(beginq);
new(endq);
beginq^.data:=0;
beginq^.next:=nil;
endq^.data:=0;
endq^.next:=nil;
while t>s do begin
for i:=1 to 3 do
addelement(beginq,endq,n+i);
removeelement(beginq);
n:=n+3;
s:=s+k;
end;
writeln(beginq^.data-1);
writeln(endq^.data+3);
readln();
end.