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

C++의 행렬에서 모래 시계의 최대 합

<시간/>

이 문제에서는 행렬이 주어집니다. 우리의 임무는 C++의 행렬에서 모래시계의 최대 합을 찾는 프로그램을 만드는 것입니다.

프로그램 설명 − 여기에서 주어진 행렬 요소에 대해 생성할 수 있는 모든 모래시계의 최대 합을 찾습니다.

모래시계 는 다음과 같은 형태로 행렬에서 만들어진 7개의 요소 모양입니다.

X X X
  X
X X X

문제를 이해하기 위해 예를 들어 보겠습니다.

입력 -

array ={
   {2 4 0 0}
   {0 1 1 0}
   {4 2 1 0}
   {0 3 0 1}}

출력 -

설명 -

Hour glass are :
2    4    0       0    1    1
     1                 2
4    2    1       0    3    0
4    0    0       1    1    0
     1                 1
2    1    0       3    0    1

따라서 다음 인덱스를 사용하여 모래시계를 만들 수 있습니다.

matrix[i][j]    matrix[i][j+1]    matrix[i][j+2]
               matrix[i+1][j+1]
matrix[i+2][j] matrix[i+2][j+1]   matrix[i+2][j+2]

[0][0]에서 [R2][C-2] 시작점까지 배열의 이러한 모든 요소의 합을 찾습니다. 그리고 배열 요소에서 생성된 이 모든 모래시계에 대한 maxSum을 찾습니다.

솔루션의 작동을 설명하는 프로그램,

#include<iostream>
using namespace std;
const int row = 4;
const int col = 4;
int findHourGlassSum(int mat[row][col]){
   if (row<3 || col<3)
      return -1;
   int maxSum = 0;
   for (int i=0; i<row-2; i++){
      for (int j=0; j<col-2; j++){
         int hrSum = (mat[i][j]+mat[i][j+1]+mat[i][j+2])+ (mat[i+1][j+1])+ (mat[i+2][j]+mat[i+2][j+1]+mat[i+2][j+2]);
         maxSum = max(maxSum, hrSum);
      }
   }
   return maxSum;
}
int main() {
   int mat[row][col] = {
      {2, 4, 0, 0},
      {0, 1, 1, 0},
      {4, 2, 1, 0},
      {0, 3, 0, 1}};
      int maxSum = findHourGlassSum(mat);
      if (maxSum == -1)
         cout<<"Not possible";
      else
         cout<<"Maximum sum of hour glass created is "<<maxSum;
      return 0;
}

출력

Maximum sum of hour glass created is 14