Как найти наибольшее число в матрице

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

C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
main()
{
int max=1;
for (int i=0; i<n;i++) //n-строки
    for(int j=0;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
printf("%d", max);
}



1



Tambel

32 / 32 / 7

Регистрация: 10.10.2010

Сообщений: 89

17.11.2010, 21:46

3

Цитата
Сообщение от cripton
Посмотреть сообщение

C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
main()
{
int max=1;
for (int i=0; i<n;i++) //n-строки
    for(int j=0;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
printf("%d", max);
}

cripton а если в массиве все элементы отрицательные? то макс элемент массива тоже будет меньше одного…

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
main()
{
int max=A[0][0];
for (int i=0; i<1;i++) //n-строки
    for(int j=1;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
 
for (int i=1; i<n;i++) //n-строки
    for(int j=0;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
printf("%d", max);
}

если не ошибаюсь..)



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

я сам сглупил немного ,попроще там)

C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
main()
{
int max=A[0][0];
for (int i=0; i<n;i++) //n-строки
    for(int j=0;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
printf("%d", max);
}



0



legend

29 / 28 / 7

Регистрация: 17.11.2010

Сообщений: 152

17.11.2010, 22:07

 [ТС]

6

Цитата
Сообщение от Tambel
Посмотреть сообщение

я сам сглупил немного ,попроще там)

C++
1
2
3
4
5
6
7
8
9
#include <stdio.h>
main()
{
int max=A[0][0];
for (int i=0; i<n;i++) //n-строки
    for(int j=0;j<m;j++) // m - столбцы
          if (A[i][j]>max) max=A[i][j];
printf("%d", max);
}

хД ну да.. это тоже самое что написал первый товарищь..



0



Tambel

32 / 32 / 7

Регистрация: 10.10.2010

Сообщений: 89

17.11.2010, 22:47

7

Цитата
Сообщение от legend
Посмотреть сообщение

хД ну да.. это тоже самое что написал первый товарищь..

нет он вместо

C++
1
int max=A[0][0];

написал

C++
1
int max=1;

а это ключевая строчка))



0



legend

29 / 28 / 7

Регистрация: 17.11.2010

Сообщений: 152

17.11.2010, 23:05

 [ТС]

8

Цитата
Сообщение от Tambel
Посмотреть сообщение

нет он вместо

C++
1
int max=A[0][0];

написал

C++
1
int max=1;

а это ключевая строчка))

лично у меня с «а[0][0]» не компелировалось.. я поставил там по [1][1] обосновываять тем что матрица размером 0х0 не хочет восприниматся.. тада все заработало



0



Алгоритм нахождения максимального значения в матрице

Постановка задачи

Найти
максимальное значение в двумерном
массиве вещественных чисел.

Математическая модель

Метод решения

Применяем
общий алгоритм поиска экстремального
значения: первое значение берем за
максимальное, перебираем все остальные
значения, среди которых ищем максимальное.
Если очередное значение больше
максимального, то это очередное значение
берем за максимальное.

1)
max:=A
1,1

2)

i:=1..n :

j:=1..n
:

если
A
i,j
>
max
max:=
A
i,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-ый метод сортировки
“Выбор с перестановкой”

В
этом методе сортируется массив либо по
возрастанию, либо по убыванию значений,
результат сортировки располагается на
месте исходных данных, т.е. исходная
информация портится
.

Метод
заключается в следующем:

  1. формируются
    все элементы массива с первого по
    предпоследний;

  2. для
    каждого формируемого места решаются
    две задачи:

а)
Ищется экстремальное значение и его
местоположение, начиная с формируемого
места до конца массива. (при сортировке
по возрастанию ищется минимальное
значение, по убыванию – максимальное)

б)
Осуществляется перестановка значения,
расположенного на формируемом месте,
с экстремальным значением.

Проиллюстрируем
метод рисунком 18.10. Исходный массив
сортируется по возрастанию и состоит
из пяти целочисленных элементов: 8, 3, 4,
9, 7

Рис.
18.10. –
Сортировка
выбором с перестановкой

Соседние файлы в папке Лекции по Паскалю

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Добрый день! Нужно в матрице размером N*N(N задает пользователь) найти максимальное значение, которое встречается в этой матрице более одного раза. Представляю себе это так:

  1. Ищем максимальное число
  2. Ищем сколько раз встречается максимальное число, если больше одного раза, то выводим. Если нет, то ищем другое максимальное число.

Пример моего кода:

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

  • Read
  • Discuss
  • 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;
    }
    

    Понравилась статья? Поделить с друзьями:
  • Как найти винит падеж в слове
  • Электронная подпись в налог ру как найти
  • Как найти средний коэффициент использования
  • Как составить экскурсию по перми
  • Как найти игроков в креативе