Pomogite20000p
04.10.2022 00:41

Долгие сборы дон кихота подходили к концу, осталось только собрать амуницию и погрузить ее на повозки. в одну повозку влезает 3 мешка. в одном мешке умещается 4 набора доспехов, а в наборе доспехов ровно 4 предмета войны. в поход требуется n предметов войны. для того, чтобы ничего не потерялось, ему нужно запомнить сколько повозок едет с ним, сколько мешков придется везти его личному , сколько доспехов придется тащить его верному коню, и сколько предметов войны останется героически надеть на себя. естественно, дон кихот не признает растрату, и, если повозка, мешок или набор доспехов не собирается полностью, то ее он не считает. для лучшего понимания смотрите примеры.
формат ввода
одно число n ≤ 2 * 109 — количество предметов войны для похода.

формат вывода
4 числа — сколько полных повозок, полных мешков, полных наборов доспехов и вещей войны нужно запомнить.

пример 1
ввод вывод
30
0 1 3 2
пример 2
ввод вывод
14
0 0 3 2
примечания
30 предметов войны — это 0 повозок, 1 мешок, 3 набора доспехов и 2 предмета войны.

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
alisakholodova9
03.10.2022 22:14

задача 1

program ProcArray;

procedure GetMax (A: array of Integer; var imax: Integer);

var

 i: Integer;

begin

 imax := Low (A);

 for i := Low (A) to High (A) do

   if A [i] > A [imax] then

     imax := i;

end;

procedure GetMin (A: array of Integer; var imin: Integer);

var

 i: Integer;

begin

 imin := Low (A);

 for i := Low (A) to High (A) do

   if A [i] < A [imin] then

     imin := i;

end;

procedure Repl (var A: array of Integer; OldValue, NewValue: Integer);

var

 i: Integer;

begin

 for i := Low (A) to High (A) do

   if A [i] > OldValue then

     A [i] := NewValue;

end;

var

 A: array [0..49] of Integer;

 i, imax, imin: Integer;

begin

 Randomize;

 for i := Low (A) to High (A) do begin

     A [i] := Random (21) - 10;

     Write (A [i] :3, ' ');

 end;

 WriteLn;

 GetMax (A, imax);

 WriteLn ('Максимальное значение = ', A [imax]);

 GetMin (A, imin);

 WriteLn ('Минимальное значение = ', A [imin]);

 Repl (A, 1, 0);

 WriteLn ('Замена >1 на 0');

 for i := Low (A) to High (A) do

     Write (A [i] :3, ' ');

 ReadLn;

end.

задача 2

program ProcArray1;

procedure Multi (A: array of Integer; var Prod: LongInt);

var

 i: Integer;

begin

 Prod := 1;

 for i := Low (A) to High (A) do

   Prod := Prod * A [i];

end;

procedure Repl (var A: array of Integer; OldValue, NewValue: Integer);

var

 i: Integer;

begin

 for i := Low (A) to High (A) do

   if A [i] > OldValue then

     A [i] := NewValue;

end;

var

 A: array [0..29] of Integer;

 i: Integer;

 p: LongInt;

begin

 Randomize;

 for i := Low (A) to High (A) do begin

     A [i] := Random (3) + 1;

     Write (A [i] :3, ' ');

 end;

 WriteLn;

 Multi (A, p);

 WriteLn ('Произведение = ', p);

 Repl (A, 5, 1);

 WriteLn ('Замена >5 на 1');

 for i := Low (A) to High (A) do

     Write (A [i] :3, ' ');

 ReadLn;

end.

Объяснение:

Во задаче №2 при заполнении массива значениями больше 5 начинает возникать переполнение LongInt из за чего значение произведения становится отрицательным

0,0(0 оценок)
Ответ:
анюко
03.10.2022 22:14

задача 1

program ProcArray;

procedure GetMax (A: array of Integer; var imax: Integer);

var

 i: Integer;

begin

 imax := Low (A);

 for i := Low (A) to High (A) do

   if A [i] > A [imax] then

     imax := i;

end;

procedure GetMin (A: array of Integer; var imin: Integer);

var

 i: Integer;

begin

 imin := Low (A);

 for i := Low (A) to High (A) do

   if A [i] < A [imin] then

     imin := i;

end;

procedure Repl (var A: array of Integer; OldValue, NewValue: Integer);

var

 i: Integer;

begin

 for i := Low (A) to High (A) do

   if A [i] > OldValue then

     A [i] := NewValue;

end;

var

 A: array [0..49] of Integer;

 i, imax, imin: Integer;

begin

 Randomize;

 for i := Low (A) to High (A) do begin

     A [i] := Random (21) - 10;

     Write (A [i] :3, ' ');

 end;

 WriteLn;

 GetMax (A, imax);

 WriteLn ('Максимальное значение = ', A [imax]);

 GetMin (A, imin);

 WriteLn ('Минимальное значение = ', A [imin]);

 Repl (A, 1, 0);

 WriteLn ('Замена >1 на 0');

 for i := Low (A) to High (A) do

     Write (A [i] :3, ' ');

 ReadLn;

end.

задача 2

program ProcArray1;

procedure Multi (A: array of Integer; var Prod: LongInt);

var

 i: Integer;

begin

 Prod := 1;

 for i := Low (A) to High (A) do

   Prod := Prod * A [i];

end;

procedure Repl (var A: array of Integer; OldValue, NewValue: Integer);

var

 i: Integer;

begin

 for i := Low (A) to High (A) do

   if A [i] > OldValue then

     A [i] := NewValue;

end;

var

 A: array [0..29] of Integer;

 i: Integer;

 p: LongInt;

begin

 Randomize;

 for i := Low (A) to High (A) do begin

     A [i] := Random (3) + 1;

     Write (A [i] :3, ' ');

 end;

 WriteLn;

 Multi (A, p);

 WriteLn ('Произведение = ', p);

 Repl (A, 5, 1);

 WriteLn ('Замена >5 на 1');

 for i := Low (A) to High (A) do

     Write (A [i] :3, ' ');

 ReadLn;

end.

Объяснение:

Во задаче №2 при заполнении массива значениями больше 5 начинает возникать переполнение LongInt из за чего значение произведения становится отрицательным

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота