29 / 28 / 7 Регистрация: 17.11.2010 Сообщений: 152 |
|
1 |
|
нахождение максимального значение в матрице17.11.2010, 21:29. Показов 5768. Ответов 7
доброго всем прекрасного время суток.. у меня такой вопрос.. есть ли способ быстро найти елемент с максимальным значением в матрице.. тоесть.. как еще можно найти этот елемент.. не сравнивая поочередно и попарно каждые два соседних числа матрици. Ведь это значительно уменшает время нахождения…. и ужасно загромождает структуру кода программы. заранее Биг вам спасибо =))
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.11.2010, 21:29 |
7 |
cripton 3 / 2 / 1 Регистрация: 02.03.2010 Сообщений: 16 |
||||
17.11.2010, 21:31 |
2 |
|||
1 |
Tambel 32 / 32 / 7 Регистрация: 10.10.2010 Сообщений: 89 |
||||||||
17.11.2010, 21:46 |
3 |
|||||||
cripton а если в массиве все элементы отрицательные? то макс элемент массива тоже будет меньше одного…
если не ошибаюсь..)
1 |
29 / 28 / 7 Регистрация: 17.11.2010 Сообщений: 152 |
|
17.11.2010, 21:52 [ТС] |
4 |
с положительними знаками я понял, довольно просто.. а вот с отрицательными.. не совсем.. (хотя отрецательные чтобы искало.. для меня было бы полезней..)
0 |
Tambel 32 / 32 / 7 Регистрация: 10.10.2010 Сообщений: 89 |
||||
17.11.2010, 22:01 |
5 |
|||
я сам сглупил немного ,попроще там)
0 |
legend 29 / 28 / 7 Регистрация: 17.11.2010 Сообщений: 152 |
||||
17.11.2010, 22:07 [ТС] |
6 |
|||
я сам сглупил немного ,попроще там)
хД ну да.. это тоже самое что написал первый товарищь..
0 |
Tambel 32 / 32 / 7 Регистрация: 10.10.2010 Сообщений: 89 |
||||||||
17.11.2010, 22:47 |
7 |
|||||||
хД ну да.. это тоже самое что написал первый товарищь.. нет он вместо
написал
а это ключевая строчка))
0 |
legend 29 / 28 / 7 Регистрация: 17.11.2010 Сообщений: 152 |
||||||||
17.11.2010, 23:05 [ТС] |
8 |
|||||||
нет он вместо
написал
а это ключевая строчка)) лично у меня с «а[0][0]» не компелировалось.. я поставил там по [1][1] обосновываять тем что матрица размером 0х0 не хочет восприниматся.. тада все заработало
0 |
Алгоритм нахождения максимального значения в матрице
Постановка задачи
Найти
максимальное значение в двумерном
массиве вещественных чисел.
Математическая модель
Метод решения
Применяем
общий алгоритм поиска экстремального
значения: первое значение берем за
максимальное, перебираем все остальные
значения, среди которых ищем максимальное.
Если очередное значение больше
максимального, то это очередное значение
берем за максимальное.
1)
max:=A1,1
2)
i:=1..n :
j:=1..n
:
если
Ai,j
>
max
max:=
Ai,j
Примечание:
индексы изменяются от 1, так как иначе
пропускаются элементы матрицы. Поэтому
элемент с индексами 1, 1 сравнивается
сам с собой.
Информационная модель
Таблица 18.1.
Информационная
модель
Статус |
Назначение |
Имя |
Тип |
Вход |
исходная |
A |
TMatr |
Выход |
максимальное |
max |
Real |
Промеж. |
индексы |
i,j |
Integer |
Type
Tmatr=array[1..n,1..m]of real;
Const
n=3; m=4;
Программная
модель
program
poisk_max_matr;
const
n=3;
m=4;
type
TMatr=array[1..n,1..m] of real;
var
A:TMatr;
max:Real;
i,j:Integer;
begin
{построчный ввод
матрицы}
for
i:=1 to n do
begin
{ввод
i-ой строки}
for
j:=1 to m do
read(A[i,j]);
{обработка нажатия
клавиши Enter}
readln
end;
{построчный вывод
матрицы}
writeln(‘Исходная
матрица:’);
for
i:=1 to n do
begin
{вывод i-ой строки}
for j:=1 to m
do
write(A[i,j]:10:2); {одно
число занимает 10 позиций,
из них 2
позиции в дробной части}
{переход на новую
строку экрана}
writeln
end;
{реализация метода
решения — поиск максимума}
max:=A[1,1];
for
i:=1 to n do
for
j:=1 to m do
if
A[i,j]>max then max:=A[i,j];
{вывод результата}
writeln(‘Максимальное
значение=’,max:10:2)
end.
18.5. Алгоритмы сортировки
Под
сортировкой понимают упорядочение
данных в массиве по какому-либо признаку.
Обычно числовые массивы сортируются
по возрастанию или убыванию значений,
а литерные и строковые по алфавиту.
Существует огромное количество методов
сортировки. Методы отличаются друг от
друга числом перестановок при выполнении
сортировки, это число принципиально
зависит от размеров исходного массива
и от начального заполнения.
Так
как сортировка массивов используется
в различных задачах, то оформим ее в
виде библиотечных подпрограмм. При
создании библиотеки будем использовать
только 2 метода.
1-ый метод сортировки
“Выбор с перестановкой”
В
этом методе сортируется массив либо по
возрастанию, либо по убыванию значений,
результат сортировки располагается на
месте исходных данных, т.е. исходная
информация портится.
Метод
заключается в следующем:
-
формируются
все элементы массива с первого по
предпоследний; -
для
каждого формируемого места решаются
две задачи:
а)
Ищется экстремальное значение и его
местоположение, начиная с формируемого
места до конца массива. (при сортировке
по возрастанию ищется минимальное
значение, по убыванию – максимальное)
б)
Осуществляется перестановка значения,
расположенного на формируемом месте,
с экстремальным значением.
Проиллюстрируем
метод рисунком 18.10. Исходный массив
сортируется по возрастанию и состоит
из пяти целочисленных элементов: 8, 3, 4,
9, 7
Рис.
18.10. – Сортировка
выбором с перестановкой
Соседние файлы в папке Лекции по Паскалю
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Добрый день! Нужно в матрице размером N*N(N задает пользователь) найти максимальное значение, которое встречается в этой матрице более одного раза. Представляю себе это так:
- Ищем максимальное число
- Ищем сколько раз встречается максимальное число, если больше одного раза, то выводим. Если нет, то ищем другое максимальное число.
Пример моего кода:
for(i=1; i<=n;i++) //Ищем максимальное число
{
for(j=1; j<=n;j++)
{
if(max<Array[i][j]){
max=Array[i][j];
}
}
}
for( i=1; i<=n;i++) //Ищем сколько раз встречается максимальное число, если больше одного раза, то выводим. Eсли нет, то ищем другое максимальное число.
{
for( j=1; j<=n;j++)
{
if(Array[i][j]==max){
maks++;
}
if(maks>1){
cout<<max;
}
else{
cout<<"-"; // то есть таких чисел нет
}
}
}
Проблема состоит в том, что не могу догадаться, как сделать так, чтобы если максимальное число(к примеру 19), встречается меньше одного раза(или один раз), у меня находилось следующее максимальное число(например 17) и если оно тоже не подходит, то числа ищутся дальше. Может реализовать через do while?
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
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
Approach : Approach is very simple. 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.
Implementation:
C++
#include<bits/stdc++.h>
using
namespace
std;
const
int
N = 4;
void
printArray(
int
result[],
int
no_of_rows) {
for
(
int
i = 0; i < no_of_rows; i++) {
cout<< result[i]<<
"n"
;
}
}
void
maxelement(
int
no_of_rows,
int
arr[][N]) {
int
result[no_of_rows];
for
(
int
i = 0; i < no_of_rows; i++) {
int
max = *max_element(arr[i], arr[i]+N);
result[i] = max;
}
printArray(result,no_of_rows);
}
int
main() {
int
arr[][N] = { {3, 4, 1, 8},
{1, 4, 9, 11},
{76, 34, 21, 1},
{2, 1, 4, 5} };
maxelement(4, arr);
return
0;
}
Java
public
class
GFG{
public
static
void
maxelement(
int
no_of_rows,
int
[][] arr) {
int
i =
0
;
int
max =
0
;
int
[] result =
new
int
[no_of_rows];
while
(i < no_of_rows) {
for
(
int
j =
0
; j < arr[i].length; j++) {
if
(arr[i][j] > max) {
max = arr[i][j];
}
}
result[i] = max;
max =
0
;
i++;
}
printArray(result);
}
private
static
void
printArray(
int
[] result) {
for
(
int
i =
0
; i<result.length;i++) {
System.out.println(result[i]);
}
}
public
static
void
main(String[] args) {
int
[][] arr =
new
int
[][] { {
3
,
4
,
1
,
8
},
{
1
,
4
,
9
,
11
},
{
76
,
34
,
21
,
1
},
{
2
,
1
,
4
,
5
} };
maxelement(
4
, arr);
}
}
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)
C#
using
System;
class
GFG
{
public
static
void
maxelement(
int
no_of_rows,
int
[][] arr)
{
int
i = 0;
int
max = 0;
int
[] result =
new
int
[no_of_rows];
while
(i < no_of_rows)
{
for
(
int
j = 0;
j < arr[i].Length; j++)
{
if
(arr[i][j] > max)
{
max = arr[i][j];
}
}
result[i] = max;
max = 0;
i++;
}
printArray(result);
}
private
static
void
printArray(
int
[] result)
{
for
(
int
i = 0; i < result.Length;i++)
{
Console.WriteLine(result[i]);
}
}
public
static
void
Main(
string
[] args)
{
int
[][] arr =
new
int
[][]
{
new
int
[] {3, 4, 1, 8},
new
int
[] {1, 4, 9, 11},
new
int
[] {76, 34, 21, 1},
new
int
[] {2, 1, 4, 5}
};
maxelement(4, arr);
}
}
PHP
<?php
$N
= 4;
function
printArray(
$result
,
$no_of_rows
)
{
for
(
$i
= 0;
$i
<
$no_of_rows
;
$i
++)
{
echo
$result
[
$i
].
"n"
;
}
}
function
maxelement(
$no_of_rows
,
$arr
)
{
global
$N
;
$i
= 0;
$max
= 0;
$result
=
array_fill
(0,
$no_of_rows
,0);
while
(
$i
<
$no_of_rows
)
{
for
(
$j
= 0;
$j
<
$N
;
$j
++)
{
if
(
$arr
[
$i
][
$j
] >
$max
)
{
$max
=
$arr
[
$i
][
$j
];
}
}
$result
[
$i
] =
$max
;
$max
= 0;
$i
++;
}
printArray(
$result
,
$no_of_rows
);
}
$arr
=
array
(
array
(3, 4, 1, 8),
array
(1, 4, 9, 11),
array
(76, 34, 21, 1),
array
(2, 1, 4, 5));
maxelement(4,
$arr
);
?>
Javascript
<script>
function
maxelement(no_of_rows, arr)
{
var
i = 0;
var
max = 0;
var
result = Array.from({length: no_of_rows}, (_, i) => 0);
while
(i < no_of_rows)
{
for
(
var
j = 0; j < arr[i].length; j++)
{
if
(arr[i][j] > max)
{
max = arr[i][j];
}
}
result[i] = max;
max = 0;
i++;
}
printArray(result);
}
function
printArray(result)
{
for
(
var
i = 0; i < result.length; i++)
{
document.write(result[i]+
"<br>"
);
}
}
var
arr = [[3, 4, 1, 8],
[ 1, 4, 9, 11],
[ 76, 34, 21, 1],
[ 2, 1, 4, 5] ];
maxelement(4, arr);
</script>
Complexity Analysis:
- Time Complexity: O(n*m) (where, n refers to no. of rows and m refers to no. of columns)
- Auxiliary Space: O(n) (where, n refers to no. of rows)
METHOD: Using List Comprehension.
APPROACH:
It is a concise way of creating a list in Python. We iterate through each row in the matrix using list comprehension and find the maximum element in the current row using the max() function. We then append the maximum element to a new list called “output”. Finally, we print the “output” list which contains the maximum element of each row in the matrix.
ALGORITHM:
1. Iterate through each row of the matrix.
2. Find the maximum element in the current row using the max() function.
3. Append the maximum element to the output list.
4. Return the output list.
Python3
matrix
=
[[
1
,
2
,
3
], [
1
,
4
,
9
], [
76
,
34
,
21
]]
output
=
[
max
(row)
for
row
in
matrix]
print
(output)
Time complexity: O(nm) where n is the number of rows and m is the number of columns in the matrix.
Auxiliary Space: O(n) where n is the number of rows in the matrix
Last Updated :
28 Apr, 2023
Like Article
Save Article
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(){
int matrix[10][10];
srand(time(0));
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
matrix[i][j] = rand() % 50; // заполняем
}
}
int max = 0;
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
if (matrix[i][j] > max)
max = matrix[i][j]; // находим наибольшее
}
}
int count = 0;
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
if (matrix[i][j] == max)
count++; // подсчитываем
}
}
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
cout << matrix[i][j] << "_"; // выводим
}
}
cout << endl << endl;
if (count > 1){
cout << "max digit:" << max << " count:" << count << endl; // выводим
}
return 0;
}
—————————переписано позднее
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>
using namespace std;
int main(){
int matrix[10][10];
vector<int> v;
srand(time(0));
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
matrix[i][j] = rand() % 50; // заполняем
}
}
int max = 0;
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
for (int a = i + 1; a < 10; a++){
for (int b = j + 1; b < 10; b++){
if (matrix[i][j] == matrix[a][b])
v.push_back(matrix[i][j]);
}
}
}
}
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
cout << matrix[i][j] << "_"; // выводим матрицу
}
}
cout << endl << "_______________________" << endl;
for (int i = 0; i < v.size(); i++){
cout << v[i] << "_"; // выводим вектор
}
for (int i = 0; i < v.size(); i++){
for (int j = 0; j < v.size(); j++){
if ((v[i] > v[j]) && (v[i] > max)){
max = v[i]; // находим наибольшее
}
}
}
cout << endl << "max:" << max << endl; // ответ
return 0;
}
——————-добавлено позднее
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <vector>
using namespace std;
int main(){
int matrix[10][10]; // = { 2, 2, 1, 1, 1, 1, 1, 1, 1 };
vector<int> v;
srand(time(0));
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
matrix[i][j] = rand() % 50; // заполняем
}
}
int max = 0;//, a = 0;
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
for (int a = i; a < 10; a++){
for (int b = j + 1; b < 10; b++){
if (matrix[i][j] == matrix[a][b]){
v.push_back(matrix[i][j]);
//break;
}
}
//a++;
}
}
}
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
cout << matrix[i][j] << "_";
}
}
cout << endl << "_______________________" << endl;
for (int i = 0; i < v.size(); i++){
cout << v[i] << "_";
}
if (v.size() != 0){
max = v[0];
}
for (int i = 0; i < v.size(); i++){
for (int j = 0; j < v.size(); j++){
if ((v[i] > v[j]) && (v[i] > max)){
max = v[i];
}
}
}
if (v.size() != 0){
cout << endl << "max:" << max << endl;
}
return 0;
}