Visary_Master 17 / 18 / 1 Регистрация: 01.12.2010 Сообщений: 296 |
||||
1 |
||||
Найти максимальный элемент в строке матрицы03.05.2011, 14:15. Показов 19398. Ответов 14 Метки нет (Все метки)
Здравствуйте, помогите в решении вопроса. Что мне исправить, чтобы мне выводило только правильно? Мне нужно посчитать максимальный элемент в каждой строке и вывести его и его индексы.
0 |
mimicria return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
||||
03.05.2011, 14:25 |
2 |
|||
0 |
Visary_Master 17 / 18 / 1 Регистрация: 01.12.2010 Сообщений: 296 |
||||
03.05.2011, 14:36 [ТС] |
3 |
|||
Надо в каждой строке чтобы искал эл-т и запоминал его индексы. Простите что сразу не написал. Добавлено через 1 минуту
Этот код ищет по всему массиву.
0 |
mimicria return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
||||
03.05.2011, 14:43 |
4 |
|||
Этот код ищет по всему массиву. А Вам по половине надо? Как вариант: под строкой вы какой индекс массива имеете ввиду? Можно местами поменять:
0 |
17 / 18 / 1 Регистрация: 01.12.2010 Сообщений: 296 |
|
03.05.2011, 14:48 [ТС] |
5 |
А Вам по половине надо? Как вариант: под строкой вы какой индекс массива имеете ввиду? Можно местами поменять: Мы находим макс. элемент, и запоминаем его индексы i и j. Есть двумерный массив. Ищем в каждой строке этого массива максимальный элемент, и выводим его индекс.
0 |
1067 / 846 / 60 Регистрация: 30.04.2011 Сообщений: 1,659 |
|
03.05.2011, 14:54 |
6 |
Надо в каждой строке чтобы искал эл-т и запоминал его индексы. Простите что сразу не написал. Этот код ищет по всему массиву. Нет. Вывод на экран — после каждой строки.
0 |
mimicria return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
||||
03.05.2011, 14:56 |
7 |
|||
Мы находим макс. элемент, и запоминаем его индексы i и j. Есть двумерный массив. Ищем в каждой строке этого массива максимальный элемент, и выводим его индекс. Ах, ну да. В каждой новой строке максимум надо обнулить
1 |
Visary_Master 17 / 18 / 1 Регистрация: 01.12.2010 Сообщений: 296 |
||||
03.05.2011, 15:29 [ТС] |
8 |
|||
Решено! Я нашел свою ошибку.
Все дело в строке, которая сейчас за комментирована. Если значение maxElement не обнулять то когда у нас найдется максимальный элемент всей матрицы, а мы еще не дошли до самой нижней строки, то у нас не будет искаться максимальный элемент строки матрицы дальше так как он уже найден. Добавлено через 30 минут
0 |
neske 1552 / 918 / 193 Регистрация: 26.03.2010 Сообщений: 3,105 |
||||
03.05.2011, 15:31 |
9 |
|||
0 |
mimicria return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
||||
03.05.2011, 15:47 |
10 |
|||
Теперь такая задача:
1 |
neske 1552 / 918 / 193 Регистрация: 26.03.2010 Сообщений: 3,105 |
||||
03.05.2011, 15:52 |
11 |
|||
mimicria, я ваш код вообще разобрать не смог.
0 |
return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
|
03.05.2011, 15:58 |
12 |
mimicria, я ваш код вообще разобрать не смог. Это не страшно, вылечат всех Добавлено через 3 минуты а в каждой последующей ищешь максимальный элемент, не превышающий предпоследний найденный максимальный. Я так задание понял
1 |
neske 1552 / 918 / 193 Регистрация: 26.03.2010 Сообщений: 3,105 |
||||
03.05.2011, 16:05 |
13 |
|||
Да, это я задание прочитал невнимательно.
0 |
mimicria return (true); 1976 / 1111 / 221 Регистрация: 19.04.2011 Сообщений: 2,345 |
||||
03.05.2011, 16:08 |
14 |
|||
И на счет кода, так все-таки лучше не делать:
За это мне стыдно, но думать как обойти не хотелось
0 |
Visary_Master 17 / 18 / 1 Регистрация: 01.12.2010 Сообщений: 296 |
||||||||
03.05.2011, 21:33 [ТС] |
15 |
|||||||
Нужно решить такую задачу. Немного я не правильно разъяснил. Потому что уже долго сижу и голова не варит. Я решаю такую задачу: Я думаю что на правильном пути, надо еще реализовать перестановку элементов в столбце. И алгоритм будет примерно такой:
Добавлено через 1 минуту
mimicria, я ваш код вообще разобрать не смог.
Мой код максимально прост.
0 |
Given a matrix, the task is to find the maximum element of each row.
Examples:
Input : [1, 2, 3] [1, 4, 9] [76, 34, 21] Output : 3 9 76 Input : [1, 2, 3, 21] [12, 1, 65, 9] [1, 56, 34, 2] Output : 21 65 56
Method 1: The idea is to run the loop for no_of_rows. Check each element inside the row and find for the maximum element. Finally, print the element.
Below is the implementation :
Python
import
numpy
def
maxelement(arr):
no_of_rows
=
len
(arr)
no_of_column
=
len
(arr[
0
])
for
i
in
range
(no_of_rows):
max1
=
0
for
j
in
range
(no_of_column):
if
arr[i][j] > max1:
max1
=
arr[i][j]
print
(max1)
arr
=
[[
3
,
4
,
1
,
8
],
[
1
,
4
,
9
,
11
],
[
76
,
34
,
21
,
1
],
[
2
,
1
,
4
,
5
]]
maxelement(arr)
Output :
8 11 76 5
Time Complexity: O(N^2), where N is the number of rows in the matrix.
Space Complexity: O(1), as no extra space is required for the algorithm.
Method 2: By calculating max element Each list of list of lists using the max() function
Python3
arr
=
[[
3
,
4
,
1
,
8
],
[
1
,
4
,
9
,
11
],
[
76
,
34
,
21
,
1
],
[
2
,
1
,
4
,
5
]]
for
i
in
arr:
print
(
max
(i))
Time complexity: O(n*m), where n is the number of rows and m is the number of columns in the matrix.
Auxiliary space: O(1), as we are only using a constant amount of extra space to store the maximum value of each row.
Another approach that could be used to find the maximum element of each row in a matrix is to use the built-in map() function. The map() function applies a given function to each element of a given iterable (such as a list or a matrix). In this case, we can use the map() function to apply the max() function to each row of the matrix.
Here is an example of how this approach could be implemented:
Python3
def
find_max_element(matrix):
return
list
(
map
(
lambda
row:
max
(row), matrix))
matrix
=
[[
3
,
4
,
1
,
8
],
[
1
,
4
,
9
,
11
],
[
76
,
34
,
21
,
1
],
[
2
,
1
,
4
,
5
]]
max_elements
=
find_max_element(matrix)
print
(max_elements)
Time complexity: O(n * m), where n is the number of rows and m is the number of columns in the matrix.
Auxiliary Space: O(n), as we are creating a new list to store the maximum elements of each row.
Method#4: Using the Recursive method.
The find_max_recursive function takes a matrix as input, along with an optional index variable i (which is initially set to 0) and a result list res (which is initially empty). The function returns a list of the maximum element in each row of the matrix.
The function first checks if it has reached the end of the matrix (i.e., if i is equal to the length of the matrix). If so, it returns the result list. Otherwise, it finds the maximum element in the current row using the built-in max function, and appends it to the result list. It then recursively calls itself with the index of the next row and the updated result list.
Python3
def
find_max_recursive(matrix, i
=
0
, res
=
[]):
if
i
=
=
len
(matrix):
return
res
max_val
=
max
(matrix[i])
res.append(max_val)
return
find_max_recursive(matrix, i
+
1
, res)
matrix
=
[[
3
,
4
,
1
,
8
],
[
1
,
4
,
9
,
11
],
[
76
,
34
,
21
,
1
],
[
2
,
1
,
4
,
5
]]
max_elements
=
find_max_recursive(matrix)
print
(max_elements)
The time complexity of this function is O(n^2), where n is the size of the input matrix. This is because the function iterates over each element in the matrix once to find the maximum value in each row, resulting in n iterations. Additionally, finding the maximum value in each row requires iterating over each element in the row, resulting in another n iterations. Therefore, the total number of iterations is n^2.
The auxiliary space of this function is also O(n^2), as the result array ‘res’ is being appended with the maximum element from each row in the matrix. Since the matrix has n^2 elements, the result array will also have a maximum of n^2 elements, leading to the O(n^2) space complexity.
Method#5: Using the lambda function + list comprehension
In this method, we define a lambda function that takes a matrix as input and uses a list comprehension to print the maximum element of each row using the NumPy max() function.
Note: Before using numpy you first need to install it by using the following command: pip install numpy
Below is the code for the following method:
Python3
import
numpy as np
maxelement
=
lambda
arr: [
print
(np.
max
(row), end
=
" "
)
for
row
in
arr]
arr
=
[[
3
,
4
,
1
,
8
],
[
1
,
4
,
9
,
11
],
[
76
,
34
,
21
,
1
],
[
2
,
1
,
4
,
5
]]
maxelement(arr)
Output:
Time complexity: O(n*m), where n is the number of rows and m is the number of columns in the matrix.
Auxiliary Space: O(1)
Please refer complete article on Find maximum element of each row in a matrix for more details!
Last Updated :
29 Mar, 2023
Like Article
Save Article
в C# так не работает(хотя в некоторых других языках так можно написать).
C# язык со статической типизацией https://ru.wikipedia.org/wiki/Статическая_типизация
В вашем случае вы не можете изменить тип вашего массива во время работы программы.
int[,] myArr = new int[4, 5];
Во в этой строчке, слева вы сказали(для упрощения), что переменная myArr принадлежит типу int[]. Теперь туда можно добавлять только числа и исправить это нельзя.
Вы дали очень мало описания и возможно не прочитали, как задавать вопросы. Нужно задать конкретный вопрос, ибо в данный момент он звучит «Я ничего не сделал, сделайте за меня»(поэтому вам ставят минусы, а не потому что вопрос плохой).
Для того, чтобы вам ответили, задайте конкретный вопрос. В данном случае он звучит «Как мне вставить в массив чисел символ?»
Дело в том, что это форум архив знаний, состоящий из вопросов. Вопрос и ответ должен содержать в себе страницу учебника. Представьте, что вы пишете Введение в тему занятия. В ответах пишутся детали, а в комментариях обсуждаете с коллегами, как лучше написать.
Подсказка, как сделать
Если правильно оформите вопрос, я на него отвечу. Пока пусто.
Здравствуйте! Помогите, пожалуйста, мне с программой. Я си изучаю 2 день и у меня возникла проблема с функцией, я никак не могу понять, как её правильно вызвать. Задание звучит так: Найти максимальный элемент каждой строки матрицы и заменить его числом 1.
#include <stdio.h> int max_el(int a, int n, int m) { int i, j, max = 0; for (i=1; i<=n; i++) { for (j=1; j<=m; j++) { if (a[i][j] > a[i][max]) max = j; } a[i][max] = 1; } } int main() { setlocale(0,""); int a[100][100], k, n, m, i, j; printf("Ââåäèòå Г°Г*çìåðГ*îñòü n*m: "); scanf("%d %d", &n, &m); srand(time(NULL)); for (i=1; i<=n; i++) { for (j=1; j<=m; j++) { a[i][j] = rand()%10; printf("%d ", a[i][j]); } printf("n"); } max_el(a, n, m); for (i=1; i<=n; i++) { for (j=1; j<=m; j++) { printf("%d", a[i][j]); } printf("n"); } _getch(); }
Для
поиска максимального элемента матрицы
и определения его индексов нам потребуются
три дополнительные переменные. В первой
из них будем хранить значение максимального
элемента, а во второй – номер строки, к
которой он находится, а в третьей –
номер столбца. Поиск максимального
элемента в матрице традиционно начинают
с элемента, стоящего в нулевой строке
и нулевом столбце. Затем организуют
вложенные циклы, которые позволят
проанализировать все элементы матрицы.
Если значение какой-либо элемента
матрицы окажется больше ранее найденного
максимума, то значение максимума
необходимо обновить, сделав равным
этому элементу. При этом сразу запоминаются
оба его индекса. Рассмотрим особенности
программной реализации этого алгоритма.
Объявляем
необходимые переменные. Переменная maxпредназначена для хранения значения
максимального элемента. Ее тип всегда
должен совпадать с типом элементов
матрицы. В переменнойimaxмы будем запоминать номер строки, в
которой находится максимальный элемент
матрицы, а в переменнойjmaxмы будем хранить номер столбца, в котором
находится максимальный элемент. Эти
две переменные всегда будут иметь
целочисленный тип.
Dim max, imax, jmax As Integer
Поиск максимума мы начинаем с элемента,
стоящего в нулевой строке и нулевом
столбце матрицы.
max = a(0, 0)
В переменные imaxиjmaxмы записываем соответственно номера
строки и столбца, которые равны нулю.
imax = 0
jmax = 0
Организуем цикл по всем строкам матрицы.
For i = 0 To m
Организуем цикл по столбцам матрицы.
Он позволит нам перебрать все элементы
в пределах i-й
строки.
For j = 0 To n
Анализируем очередной элемент матрицы.
If a(i, j) > max Then
Если его значение больше, чем значение
ранее найденного максимума, то необходимо
обновить значение максимума (переменной
max),
записав в него значение текущего
элемента.
max = a(i, j)
Сразу же запоминаем индексы нового
максимума. Номер строки, в которой
находится данный элемент матрицы,
хранится в переменной i,
а номер столбца – в переменнойj.
imax = i
jmax = j
End If
Next
Next
После завершения вложенных циклов нам
остается только вывести полученные
результаты в окно списка. Сначала выведем
горизонтальную черту, чтобы зрительно
отделить исходные данные от полученных
результатов.
lstMatrix.Items.Add(«——————————«)
Заем выведем максимальное значение и
его индексы.
lstMatrix.Items.Add(«Максимум:»
+ Str(max))
lstMatrix.Items.Add(«Строка:»
+ Str(imax))
lstMatrix.Items.Add(«Столбец:»
+ Str(jmax))
Полный
текст программы представлен в приложении
38. Пример работы программы приведен на
рис. 53.
Рис. 53. Пример работы программы
поиска максимального элемента в
прямоугольной матрице
8.4. Обработка матрицы по строкам
Обработка
прямоугольной матрицы может вестись
двумя способами: по строкам и по столбцам.
Как правило, способ обработки определяется
условием решаемой задачи. При обработке
по строкам вложенные циклы организуются
таким образом, чтобы за один шаг внешнего
цикла полностью обрабатывалась одна
строка матрицы. В этом случае внешний
цикл будет идти по строкам матрицы, а
внутренний – по столбцам. В качестве
примера рассмотрим задачу вычисления
среднего арифметического четных
элементов в каждой строке матрицы.
Для
решения этой задачи необходимо в каждой
строке матрицы вычислить свою сумму и
количество четных элементов. Затем,
если это возможно, найти среднее
арифметическое. Если же в какой-то строке
матрицы нет четных элементов, то вместо
среднего арифметического мы будем
печатать поясняющее сообщение. Результаты
работы программы будем выводить в окно
списка.
Начнем
с объявления необходимых переменных.
Переменные sumиkol,
имеющие целочисленный тип данных,
предназначены для хранения суммы и
количества четных элементов в одной
строке матрицы.
Dim sum, kol As Integer
Так как среднее арифметическое получается
в результате деления, то соответствующая
переменная всегда будет иметь рациональный
тип данных.
Dim sred As Single
Для каждой строки матрицы мы будем
получать отдельный результат. Поэтому
удобно совместить процессы вычисления
и вывода в одном цикле. Чтобы результаты
вычислений зрительно отделялись от
исходных данных, выведем горизонтальную
черту.
lstMatrix.Items.Add(«——————————«)
Результаты вычислений мы будем выводить
в две колонки. В первой будет указываться
номер обрабатываемой строки матрицы,
а во второй – найденное значение среднего
арифметического четных элементов.
Выводим поясняющий заголовок. Константа
vbTabпозволяет организовать вывод в две
колонки.
lstMatrix.Items.Add(«Строка»
+ vbTab + _
«Сред.
арифм.»)
Так как по условию задачи требуется,
чтобы каждая строка матрицы обрабатывалась
отдельно, то обработку матрицы будем
вести по строкам. Для этого организуем
внешний цикл по строкам, а внутренний
– по столбцам.
For i = 0 To m
За один шаг внешнего цикла мы будем
полностью обрабатывать одну строку
матрицы. Для этого мы будем использовать
внутренний цикл. Следовательно, начальные
значения для суммы и количества необходимо
задать до него.
sum = 0
kol = 0
Организуем внутренний цикл. Нам необходимо
обработать все элементы, находящиеся
в i-й
строке матрицы. Для этого мы должны
пройтись по всем столбцам матрицы.
Соответственно, внутренний цикл будет
по столбцам.
For j = 0 To n
На каждом шаге цикла анализируем элемент
матрицы.
If a(i, j) Mod 2 = 0 Then
Если его значение при делении на 2 дает
в остатке ноль, значит, оно четное, и
данный элемент надо добавить к сумме.
При этом количество четных элементов
в данной строке матрицы увеличивается
на единицу.
sum += a(i, j)
kol += 1
End If
Next
После завершения внутреннего цикла
можно приступать к вычислению среднего
арифметического четных элементов в
одной строке матрицы. Сначала анализируем
количество четных элементов.
If kol = 0 Then
Если количество четных элементов равно
нулю, значит, их в рассматриваемой строке
нет ни одного четного элемента.
Следовательно, вычислить их среднее
арифметическое невозможно. Поэтому
вместо ответа выводим номер строки и
поясняющее сообщение.
lstMatrix.Items.Add(Str(i)
+ vbTab + _
«В
строке нет четных»)
Else
Иначе мы делим сумму четных элементов
на их количество и получаем искомое
значение.
sred = sum / kol
В окно списка выводим номер строки и
найденное значение среднего арифметического
четных элементов в этой строке.
lstMatrix.Items.Add(Str(i)
+ vbTab + _
Str(sred))
End If
Next
Полный
текст программы представлен в приложении
39. Пример работы программы приведен на
рис. 54.
Рис. 54. Пример работы программы
поиска среднего арифметического четных
элементов в каждой строке прямоугольной
матрицы
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #