0 / 0 / 1 Регистрация: 13.01.2017 Сообщений: 31 |
|
1 |
|
Найти минимальный элемент в матрице15.03.2017, 00:05. Показов 6214. Ответов 1
1.Заполнить матрицу m*n с клавиатуры. Найти минимальный элемент в матрице.
0 |
Hitoku 1754 / 1346 / 1407 Регистрация: 28.10.2016 Сообщений: 4,267 |
||||
15.03.2017, 00:25 |
2 |
|||
Сообщение было отмечено Pudge1488 как решение Решение
1 |
Мудрец
(12164),
закрыт
13 лет назад
Дополнен 13 лет назад
ГЛЮКИ:
program variant3;
var
a:array[1..10,1..5] of integer;
i,j,n,k,min,nmin:integer;
begin
readln(n,k);
for i:=1 to n do
for j:=1 to k do begin
writeln(‘a(‘,i,’;’,j,’)=’);
readln(a[i,j]);
end;
min:=a[1,1];
nmin:= ???
for i:=1 to n do
for j:=1 to k do begin
if a[i,j]
Gennady
Гений
(59298)
13 лет назад
Доброго времени суток.
Ищите только индексы. По индексам всегда отобразите сам минимальный элемент
MinI := 1;
MinJ := 1;
for i:=1 to n do
for j:=1 to k do
if a[i,j] < a[MinI,MinJ] then begin
MinI := i;
MinJ := j;
end;
{индексы нашли}
WriteLn(A[MinI, MinJ]); {а так показываем минимальный элемент}
Удачи!
Vlad02Профи (556)
13 лет назад
В
if a[i,j] < a[MinI,MinJ] then begin
MinI := i;
MinJ := j;
end;
Пропущена строка собственно поиска минимального элемента
Соответственно нормальная программа выглядит примерно так:
program variant3;
const
Max_X=10;
Max_Y=5
Type
T_Arr= array[1.. Max_X,1.. Max_Y] of integer;
var
a: T_Arr;
i,j,n,k,min,minI,minJ:integer;
begin
Write(‘Строк=’);
readln(n);
Write(‘Столбцов=’);
readln(k);
for i:=1 to n do
for j:=1 to k do begin
writeln(‘a(‘,i,’;’,j,’)=’);
readln(a[i,j]);
end;
min:=a[1,1];
minI:=1;
minJ:=1 ;
for i:=1 to n do
for j:=1 to k do begin
if a[i,j]
Vlad02Профи (556)
13 лет назад
А сам минимальный элемент вам на блюдечке? или третий цикл перебора? Вот мой вариант и ищет ОДНОВРЕМЕННО минимальный элемент массива и его индексы, а ваш на выходе выдаст элемент за номером 1,1 , можете компильнуть и проверить
Vlad02Профи (556)
13 лет назад
Насчет подсчетов вызовов в вашем вариант осуществляется за цикл ДВА ОБЯЗАТЕЛЬНЫХ вызова элемента массива в моём ОДИН ОБЯЗАТЕЛЬНЫЙ и один в случае выполнения условия сравнения, то есть в наихудшем варианте(монотонно убывающий массив) мой вариант по количеству вызовов равен вашему, в остальных случаях имеем количество необязательных вызовов равное количеству элементов меньших чем все предыдущие, а в среднем это как минимум в 1Ю5 раза меньше, на массивах под милион элементов с динамическим вызовом это скажется существенно, ну а мой последний вариант вообще массивы не использует:)
Vlad02
Профи
(556)
13 лет назад
Собственно Геннадий напомнил студенчество, и соответственно простейшее решение задачи 🙂 с приведёнными требованиями
program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
for i:=1 to IndexI do
for i:=1 to IndexI do
if x
Vlad02Профи (556)
13 лет назад
Сожрала и исковеркала программу-program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
for i:=1 to IndexI do
for j:=1 to IndexI do begin
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
if x
Vlad02Профи (556)
13 лет назад
так как убивает после знака написал словом меньше
program variant3;
Var
i,j, IndexI,IndexJ,MinI,MinJ:integer;
x,y:real;{необходимый тип}
begin
y:=1,8e38;{наибольшее возможное число для данного типа}
write(‘Число столбцов=’);
readln(IndexJ);
write(‘Число строк=’);
readln(IndexI);
for i:=1 to IndexI do
for j:=1 to IndexI do begin
write(‘Элемент [‘,i,’;’,j’]=’);
readln(x);
if x меньше y then begin y:=x;MinI:=i;MinJ:=j end;
end;{j}
write(‘Минимальный элемент X[‘,MinI,’;’,MinJ’]=’,y);
end.
Matrix23. Дана матрица размера $$M times N$$. В каждой строке матрицы найти минимальный элемент.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
program Matrix23; var a:array [1..10,1..10] of integer; Min,M, N, i, j:Integer; begin Write(‘N: ‘); Readln(N); Write(‘M: ‘); Readln(M); for i:=1 to M do begin writeln(i,‘: ‘); for j:=1 to N do begin Write(j,‘ : ‘); Read(a[i,j]); end; end; for i:=1 to M do begin writeln(i,‘: ‘); Min:=a[i,1]; for j:=2 to N do begin if a[i,j]<Min then Min:=a[i,j]; end; writeln(‘Минимальный элемент:’,Min); end; end. |
Другие задачи из раздела Matrix можно посмотреть здесь.
const n=11; var a:array[1..n,1..n] of byte; i,j,mn,imn,jmn:byte; s:integer; f:text; begin randomize; assign(f,'output.txt'); rewrite(f); writeln('Исходная матрица'); writeln(f,'Исходная матрица'); for i:=1 to n do begin for j:=1 to n do begin a[i,j]:=1+random(100); write(f,a[i,j]:4); write(a[i,j]:4); if i+j=2 then begin mn:=a[1,1]; imn:=1; jmn:=1; end else if a[i,j]<mn then begin mn:=a[i,j]; imn:=i; jmn:=j; end end; writeln(f,''); writeln(''); end; writeln(f,'Минимальный элемент a[',imn,',',jmn,']=',mn); writeln('Минимальный элемент a[',imn,',',jmn,']=',mn); writeln(f,'Измененная матрица'); writeln('Измененная матрица'); for i:=1 to n do begin for j:=1 to n do begin if(i=imn)or(j=jmn) then a[i,j]:=0; write(f,a[i,j]:4); write(a[i,j]:4); end; writeln(f,''); writeln(''); end; writeln(f,'Суммы элементов в столбцах'); writeln('Суммы элементов в столбцах'); for j:=1 to n do begin s:=0; for i:=1 to n do s:=s+a[i,j]; writeln(f,j:2,'=',s:4); writeln(j:2,'=',s:4); end; close(f); end.
Перейти к содержанию
Индексы минимальных элементов матрицы
Просмотров 3.8к. Обновлено 15 октября 2021
Вывести на экран индексы всех минимальных элементов матрицы.
Эта задача отличается от поиска минимума тем, что нужно найти и вывести на экран не само минимальное значение, а его индексы (позицию, положение в матрице). Кроме того, минимальных (но равных между собой) значений в массиве может быть несколько. Следовательно, разумно вывести индексы всех минимальных элементов.
Задача складывается из двух подзадач, которые должны быть решены последовательно:
- Поиск минимума в массиве (в данном случае двумерном).
- Поиск элементов, равных ранее найденному минимуму.
Найденное минимальное значение должно быть сохранено в переменной (например, minimum). Однако можно было бы сохранять не само значение, а индекс элемента массива. Но поскольку мы имеем дело с матрицей, то пришлось бы сохранять два числа (номер строки и номер столбца).
Алгоритм поиска минимального значения:
- Присвоить minimum максимально возможное (или больше) значение для исследуемого массива.
- Перебрать элементы матрицы (используя конструкцию вложенного цикла). Каждый элемент сравнивать со значением minimum. Если очередной элемент меньше значения minimuma, то следует присвоить значение текущего элемента переменной minimum.
Алгоритм определения позиций всех минимальных элементов матрицы:
- Снова перебираем элементы матрицы.
- Сравниваем каждый элемент со значением minimum.
- Если они равны между собой, то выводим индексы текущего элемента на экран. (Индексы текущего элемента — это значения счетчиков первого и второго циклов.)
Примечания:
- Ниже в решениях задачи поиска индексов минимальных элементов на языках программирования поиск минимального значения выполняется в том же цикле, что и заполнение матрицы.
- Если индексация массива начинается с нуля, то лучше при выводе индексов увеличивать их на единицу. Так будет более ясно, где находится элемент.
Pascal
const N = 5; M = 7;
var
mx: array[1..N,1..M] of integer;
min: integer;
i, j: byte;
begin
min := MAXINT;
randomize;
for i:=1 to N do begin
for j:=1 to M do begin
mx[i,j] := random(50) - 25;
write(mx[i,j]:4);
if mx[i,j] < min then min:=mx[i,j];
end;
writeln;
end;
writeln('Минимальное значение: ', min);
for i:=1 to N do
for j:=1 to M do
if mx[i,j] = min then
writeln('строка: ', i, '; столбец: ', j);
end.
-19 6 3 18 -12 -3 24
-4 15 -6 19 -15 -1 4
6 -9 -12 23 -3 3 -11
5 0 -11 -4 -19 -6 1
17 20 -1 6 17 -1 15
Минимальное значение: -19
строка: 1; столбец: 1
строка: 4; столбец: 5
Язык Си
#include < stdio.h>
#define M 7
#define N 5
main() {
int a[N][M];
int min, i, j;
srand(time(NULL));
min = 25;
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
a[i][j] = rand() % 50 - 25;
printf("%5d", a[i][j]);
if (min > a[i][j]) min = a[i][j];
}
printf("n");
}
printf("%dn", min);
for (i=0; i< N; i++) {
for (j=0; j< M; j++) {
if (min == a[i][j])
printf("row: %d, col: %dn", i+1, j+1);
}
}
}
Python
индекс минимального элемента массива python
from random import random
M = 7
N = 5
a = []
for i in range(N):
b = []
for j in range(M):
b.append(int(random()*50) - 25)
print("%4d" % b[j], end='')
a.append(b)
print()
min_mx = 25
for i in range(N):
min_i = min(a[i])
if min_i < min_mx:
min_mx = min_i
print(min_mx)
for i in range(N):
for j in range(M):
if min_mx == a[i][j]:
print('Row: %d, col: %d' % (i+1,j+1))
Пример выполнения:-18 -23 -8 17 12 4 -22
16 -10 -18 6 -9 19 23
8 -1 -7 0 -9 24 -12
-5 16 14 -2 1 7 -16
-7 5 1 -23 -4 -4 17
-23
Row: 1, col: 2
Row: 5, col: 4
В языке Python есть встроенная функция min, которая возвращает минимальный элемент одномерного списка. Если же ее применить к двумерному списку, то она возвращает вложенный список, первый элемент которого оказывается минимальным.
Поэтому в коде поиска минимального элемента матрицы эта функция используется к каждой строке (вложенному списку) отдельно.
Использование функции min позволяет не перебирать отдельные элементы каждой строки, а ограничиться только перебором самих строк.
Классический вариант поиска минимального значения матрицы выглядел бы так:
… min_mx = 25 for i in range(N): for j in range(M): if a[i][j] < min_mx: min_mx = a[i][j] …
КуМир
алг индексы минимумов
нач
цел M = 7, N = 5
цел таб a[1:N,1:M]
цел i, j, minimum
minimum := 25
нц для i от 1 до N
нц для j от 1 до M
a[i,j] := int(rand(0,50)) - 25
вывод a[i,j]:4, " "
если minimum > a[i,j] то
minimum := a[i,j]
все
кц
вывод нс
кц
вывод minimum, нс
нц для i от 1 до N
нц для j от 1 до M
если minimum = a[i,j] то
вывод "строка: ",i, ", столбец: ",j, нс
все
кц
кц
кон
Basic-256
M = 7
N = 5
dim a(N,M)
min = 25
for i = 0 to N-1
for j=0 to M-1
a[i,j] = int(rand*50)-25
print a[i,j] + " ";
if min > a[i,j] then min = a[i,j]
next j
next i
print min
for i = 0 to N-1
for j=0 to M-1
if min = a[i,j] then print (i+1) + " " + ( j+1)
next j
next i