На первый взгляд кажется, что задача простая. Поскольку последовательность состоит из целых чисел, то среди них могут быть и отрицательные, а значит, минимальное произведение получится, если умножить максимальное положительное число на минимальное отрицательное. Однако, это не так, если в последовательность входят только положительные или только отрицательные числа, поэтому такие случаи требуют особого рассмотрения.
Если все элементы последовательности положительные, то очевидно, что минимальное произведение – это произведение двух минимальных элементов последовательности. Если же все элементы последовательности отрицательные, то как ни странно, минимальное произведение дадут два максимальных элемента последовательности (так как они по модулю ближе всех к нулю, а минус на минус даёт плюс).
Таким образом, получается, что нам необходимо найти в последовательности два максимальных и два минимальных элемента, а потом выбрать минимальное произведение из трёх. Для одновременного поиска двух максимальных элементов можно использовать стратегию «турнирной таблицы». После считывания каждого элемента нужно будет сравнивать его с текущими значениями первого и второго максимума, и разбирать случаи. Их будет три. Первый случай – очередной элемент последовательности больше текущего значения первого максимума. Тогда нужно первый максимум опустить на вторую позицию, а на первую позицию записать новый элемент. Второй случай – элемент не больше первого максимума (возможно, что равен ему), но больше второго. Тогда первый максимум не изменяется, а на вторую позицию записывается считанный элемент. Третий случай – элемент не больше второго максимума (возможно, что равен ему). В этом случае нам не нужно предпринимать никаких действий. Минимумы ищутся аналогично.
Остаётся последний вопрос – какие начальные значения задать максимумам и минимумам. По аналогии с задачей № 2 в максимумы нужно записывать числа, которые гарантированно меньше любого элемента последовательности, а в минимумы – числа, которые гарантированно больше любого элемента последовательности.
var a,max1,max2,min1,min2,p:integer;
begin
max1 := -10001;
max2 := -10001;
min1 := 10001;
min2 := 10001;
read(a);
while a <> 0 do begin
if a > max1
then begin
max2 := max1;
max1 := a
end
else if a > max2 then max2 := a;
if a < min1
then begin
min2 := min1;
min1 := a
end
else if a < min2 then min2:=a;
read(a)
end;
p := max1 * min1;
if max1 * max2 < p then p := max1 * max2;
if min1 * min2 < p then p := min1 * min2;
writeln(p)
end.
хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз хз
Поделитесь своими знаниями, ответьте на вопрос:
Язык программирования паскаль abc! в матрице имеется столбец, в котором разность между максимальным элементом и средним арифметическим больше первого элемента. найти этот столбец, и заменить его элементы на единицу.
nm = 50;
nn = 50;
type
Mas=array[1..nm,1..nn] of integer;
procedure MatrixInit(var a:Mas;m,n,p,q:integer);
{ Заполнение массива размером m*n
целыми случайными числами из интервала [p;q] }
var
i,j,k:integer;
begin
k:=q-p+1;
for i:=1 to m do
for j:=1 to n do a[i,j]:=Random(k)-p
end;
procedure MatrixOutput(var a:Mas;m,n,k:integer);
{ вывод элементов матрицы размера m*n в k позициях }
var
i,j:integer;
begin
for i:=1 to m do
begin for j:=1 to n do Write(a[i,j]:k); Writeln end
end;
function IsFits(var a:Mas;m,col:integer):boolean;
{ функция возвращает true, если колонка col явдяется "подходящей" }
var
i,max:integer;
mv:real;
begin
max:=a[1,col]; mv:=max;
for i:=2 to m do
begin
mv:=mv+a[i,col];
if max<a[i,col] then max:=a[i,col]
end;
mv:=mv/m;
IsFits:=(max-mv>a[1,col])
end;
procedure ColumnReplace(var a:Mas;m,col:integer);
{ Замена элементов столбца col единицами }
var
i:integer;
begin
for i:=1 to m do a[i,col]:=1
end;
var
P: Mas;
a,b,m,n,j,k:integer;
flag:boolean;
begin
Randomize;
Write('Введите количество строк и столбцов матрицы: ');
Read(m,n);
Write('Укажите минимальное и максимальной значение элементов: ');
Read(a,b);
Write('Укажите количество позиций для вывода значения элемента: ');
Read(k);
MatrixInit(P,m,n,a,b);
Writeln('Исходный массив');
MatrixOutput(P,m,n,k);
j:=1;
repeat
flag:=IsFits(P,m,j);
if flag then
begin
ColumnReplace(P,m,j);
Writeln('Результирующий массив');
MatrixOutput(P,m,n,k)
end
else Inc(j)
until flag or (j>n);
if not flag then
Writeln('')
end.
Тестовое решение:
Введите количество строк и столбцов матрицы: 5 8
Укажите минимальное и максимальной значение элементов: 0 20
Укажите количество позиций для вывода значения элемента: 3
Исходный массив
19 7 2 15 2 11 2 15
12 16 8 14 6 8 1 17
12 14 10 8 7 19 7 1
0 9 0 7 18 10 2 5
18 8 4 9 16 10 14 10
Результирующий массив
19 7 1 15 2 11 2 15
12 16 1 14 6 8 1 17
12 14 1 8 7 19 7 1
0 9 1 7 18 10 2 5
18 8 1 9 16 10 14 10