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

C++에서 행렬의 모든 열에서 최대 차이가 있는 쌍 찾기

<시간/>

하나의 행렬 또는 NxN 차수가 있다고 가정합니다. 행렬의 모든 열과 최대 차이를 형성하는 요소 쌍을 찾아야 합니다. 따라서 행렬이 다음과 같은 경우 -

1 2 3
5 3 5
9 6 7

따라서 출력은 8이 됩니다. 쌍은 열 0의 (1, 9)이므로

아이디어는 간단합니다. 각 열의 최대 요소와 최소 요소 간의 차이를 찾기만 하면 됩니다. 그런 다음 최대 차이를 반환합니다.

#include<iostream>
#define N 5
using namespace std;
int maxVal(int x, int y){
   return (x > y) ? x : y;
}
int minVal(int x, int y){
   return (x > y) ? y : x;
}
int colMaxDiff(int mat[N][N]) {
   int diff = INT_MIN;
   for (int i = 0; i < N; i++) {
      int max_val = mat[0][i], min_val = mat[0][i];
      for (int j = 1; j < N; j++) {
         max_val = maxVal(max_val, mat[j][i]);
         min_val = minVal(min_val, mat[j][i]);
      }
      diff = maxVal(diff, max_val - min_val);
   }
   return diff;
}
int main() {
   int mat[N][N] = {{ 1, 2, 3, 4, 5 }, { 5, 3, 5, 4, 0 }, { 5, 6, 7, 8, 9 }, { 0, 6, 3, 4, 12 },
{ 9, 7, 12, 4, 3 },};
   cout << "Max difference : " << colMaxDiff(mat) << endl;
}

출력

Max difference : 12