написать задачу на С++
К тупику со стороны пути 1 (см. рисунок) подъехал поезд. Разрешается отцепить от поезда один или сразу несколько первых вагонов и завезти их в тупик (при желании, можно даже завезти в тупик сразу весь поезд). После этого часть из этих вагонов вывезти в сторону пути 2. После этого можно завезти в тупик еще несколько вагонов и снова часть оказавшихся вагонов вывезти в сторону пути 2. И так далее (так, что каждый вагон может лишь один раз заехать с пути 1 в тупик, а затем один раз выехать из тупика на путь 2). Заезжать в тупик с пути 2 или выезжать из тупика на путь 1 запрещается. Нельзя с пути 1 попасть на путь 2, не заезжая в тупик.
Известно, в каком порядке изначально идут вагоны поезда. Требуется с указанных операций сделать так, чтобы вагоны поезда шли по порядку (сначала первый, потом второй и т.д., считая от головы поезда, едущего по пути 2 в сторону от тупика).
Входные данные
Вводится число N — количество вагонов в поезде (1≤N≤2000). Дальше идут номера вагонов в порядке от головы поезда, едущего по пути 1 в сторону тупика. Вагоны пронумерованы натуральными числами от 1 до N, каждое из которых встречается ровно один раз.
Выходные данные
Если сделать так, чтобы вагоны шли в порядке от 1 до N, считая от головы поезда, когда поезд поедет по пути 2 из тупика, можно, выведите действия, которые нужно проделать с поездом. Каждое действие описывается двумя числами: типом и количеством вагонов:
если нужно завезти с пути 1 в тупик K вагонов, должно быть выведено сначала число 1, а затем — число K (K≥1),
если нужно вывезти из тупика на путь 2 K вагонов, должно быть выведено сначала число 2, а затем — число K (K≥1).
Если возможно несколько последовательностей действий, приводящих к нужному результату, выведите любую из них.
Если выстроить вагоны по порядку невозможно, выведите одно число 0.
Выберу лучший ответ! заранее
procedure MatPrint(a:array[,] of integer);
begin
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to Length(a,1)-1 do Write(a[i,j]:4);
Writeln
end
end;
procedure MatReplaceOdd(a:array[,] of integer; value:integer);
begin
for var i:=0 to Length(a,0)-1 do
for var j:=0 to Length(a,1)-1 do
if a[i,j].IsOdd then a[i,j]:=value
end;
begin
var n,m:integer;
Write('Задайте число строк и столбцов матрицы: ');
Read(n,m);
var a:=MatrixRandom(n,m,-99,99);
Writeln('Исходный массив');
MatPrint(a);
MatReplaceOdd(a,26);
Writeln('Результирующий массив');
MatPrint(a)
end.
Тестовое решение
Задайте число строк и столбцов матрицы: 5 7
Исходный массив
-14 86 52 -85 -52 -79 78
20 -80 68 89 -45 -45 -36
-41 -60 96 43 16 56 -58
-39 81 1 26 -15 -98 89
57 -51 79 -28 -24 -63 -74
Результирующий массив
-14 86 52 26 -52 26 78
20 -80 68 26 26 26 -36
26 -60 96 26 16 56 -58
26 26 26 26 26 -98 26
26 26 26 -28 -24 26 -74
begin
var a:=ArrRandomReal(28,0.001,2); a.Println;
Writeln(NewLine,'P=',a.Where(x->x<1.0).Aggregate(1.0,(p,x)->p*x))
end.
Тестовое решение
0.0398313784756844 0.521430412644721 1.21896472712139 1.94948843003553 1.15333909315725 0.788220413078657 0.284177359403659 1.78978303515016 0.678028235740042 1.55275635141682 0.189534365820482 0.741079475998916 1.8561824476473 1.56863753180655 1.46180190814184 0.424840159483645 1.72583213937042 1.9121896329998 1.74689281148598 1.49191368740467 0.900698237893031 0.867495573381193 1.51968024434926 1.28361295387922 0.144896066409953 0.40525055964489 0.897010715250862 1.71948831971571
P=7.74656862552087E-06