Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 정방 행렬의 최대값과 최소값

<시간/>

문제 설명

n*n 차의 정사각형 행렬이 주어지면 행렬에서 최대값과 최소값을 찾습니다.

예시

주어진 행렬이 -

인 경우
{{15, 17, 19}, {5, 1, 7}, {14, 5, 16}}
then
Minimum number is 1 and maximum number is 19

알고리즘

  • 행렬의 시작 부분에서 행렬의 동일한 행 끝에서 다른 요소 하나를 행렬에서 선택
  • 이를 비교하고 다음으로 더 작은 것을 행렬의 최소값과 비교하고 큰 값을 행렬의 최대값과 비교합니다.
  • 두 요소에 대해 3개의 비교가 필요하므로 전체 행렬을 순회하려면 총 3/2n 2 이 필요합니다. 비교

예시

이제 예를 살펴보겠습니다 -

#include <bits/stdc++.h>
#define MAX 200
using namespace std;
void getMinMax(int matrix[MAX][MAX], int n) {
   int min = INT_MAX;
   int max = INT_MIN;
   for (int i = 0; i < n; ++i) {
      for (int j = 0; j <= n / 2; ++j){
         if (matrix[i][j] > matri[i][n - j - 1]) {
            if (min > matrixi][n - j - 1]) {
               min = marix[i][n - j -1];
            }
            if (max < matrixi][j]) {
               max = marix[i][j];
            }
         } else {
            if (min > matrixi][j]) {
               min = marix[i][j];
            }
            if (max < matrixi][n - j - 1]) {
               max = marix[i][n - j - 1];
            }
         }
      }
   }
   cout << "Maximum = " << max << ", Minimu = " << min << endl;
}
int main() {
   int matrix[MAX][MAX] = { {15, 17, 19}, {5, 1, 7}, {14, 5, 16} };
   getMinMax(matrix, 3);
   return 0;
}

출력

Maximum = 19, Minimum = 1