5. Количество бактерий увеличивается каждый час в 2 раза. Определить, сколько времени потребуется для выведения 1 млн. бактерий, если сначала их было 100 штук. Время выводить в днях и часах.
Надо занимать единицу из старшего разряда, при этом помнить, что в случаях, когда занимается единица старшего разряда, она дает две единицы младшего разряда (одну из которых держим в уме).
Если занимается единица через несколько разрядов, то она дает по одной единице во всех промежуточных нулевых разрядах и две единицы в том разряде, для которого занималась.
То есть что бы из последнего 0 вычесть единицу. идем в третий разряд от конца (где есть 1), забираем ее оттуда, там становится 0, во втором разряде становится 1, и в последнем разряде становится 1 и единица в уме. Из той которая в уме вычитаем единицу внизу, в итог идет 1
К сожалению не знаю как это понятно можно нарисовать.
procedure MatrTransform<T>(var Matr: Array[,] of T; TransformRule: T -> T; IndicesPredicate: (integer,integer) -> boolean := nil);
begin
if IndicesPredicate = nil then begin
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end
else
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
if (IndicesPredicate(i,k)) then
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end;
begin
var (n,m) := ReadInteger2('Enter dimensions of matrix: ');
var A := ReadMatrInteger(n,m);
A.Println;
MatrTransform(A, x -> x mod 7, (row, col) -> (row+col) mod 2 = 0);
println('');
A.Println;
end.
З.Ы Решение представлено для текстовой версии задачи, в которой говориться о трансформации двумерного массива
З.Ы 2 Generic-Процедура MatrTransform<> Может изменять элементы матрицы как обращая внимание на позицию элемента в матрице, так и нет. По этому в ней больше кода, чем вам, возможно, нужно.
З.Ы 3 MatrTransform<> Может работать с двумерными массивами любого типа данных
10101
Объяснение:
Надо занимать единицу из старшего разряда, при этом помнить, что в случаях, когда занимается единица старшего разряда, она дает две единицы младшего разряда (одну из которых держим в уме).
Если занимается единица через несколько разрядов, то она дает по одной единице во всех промежуточных нулевых разрядах и две единицы в том разряде, для которого занималась.
То есть что бы из последнего 0 вычесть единицу. идем в третий разряд от конца (где есть 1), забираем ее оттуда, там становится 0, во втором разряде становится 1, и в последнем разряде становится 1 и единица в уме. Из той которая в уме вычитаем единицу внизу, в итог идет 1
К сожалению не знаю как это понятно можно нарисовать.
--- PascalABC.NET 3.6.2 ---
procedure MatrTransform<T>(var Matr: Array[,] of T; TransformRule: T -> T; IndicesPredicate: (integer,integer) -> boolean := nil);
begin
if IndicesPredicate = nil then begin
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end
else
for var i:= 0 to Matr.GetLength(0)-1 do
begin
for var k := 0 to Matr.GetLength(1)-1 do
begin
if (IndicesPredicate(i,k)) then
Matr[i,k] := TransformRule(Matr[i,k]);
end;
end;
end;
begin
var (n,m) := ReadInteger2('Enter dimensions of matrix: ');
var A := ReadMatrInteger(n,m);
A.Println;
MatrTransform(A, x -> x mod 7, (row, col) -> (row+col) mod 2 = 0);
println('');
A.Println;
end.
З.Ы Решение представлено для текстовой версии задачи, в которой говориться о трансформации двумерного массива
З.Ы 2 Generic-Процедура MatrTransform<> Может изменять элементы матрицы как обращая внимание на позицию элемента в матрице, так и нет. По этому в ней больше кода, чем вам, возможно, нужно.
З.Ы 3 MatrTransform<> Может работать с двумерными массивами любого типа данных