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

C++에서 모든 행의 합이 동일하도록 N^2개의 숫자를 행렬에 배치합니다.


이 문제에서 정수 값 N이 주어졌습니다. 우리의 임무는 범위(1, N 2 ) 각 행의 합 요소가 동일한 방식으로 크기가 NxN인 2D 행렬에서.

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

입력 - N =4

출력 -

1 6 11 16
2 7 12 13
3 8  9 14
4 5 10 15

각 행의 요소 합은 34입니다.

이 방법을 해결하려면 각 행의 합계가 동일한 방식으로 행렬의 각 요소를 배치해야 합니다. 이를 위해 우리는 탐욕스러운 접근 방식을 사용하여 합이 같도록 올바른 요소를 제자리에 배치합니다.

이를 위해 처음에는 행렬의 모든 요소를 ​​공급한 다음 이 공식을 사용하여 이전 행렬의 요소를 포함하는 새 행렬을 만듭니다.

resultMat[i][j] = prevMat[j][(i+j)%n]

예시

아래 코드는 우리 솔루션의 구현을 보여줍니다.

#include<iostream>
using namespace std;
   int main(){
   int n = 4,i,j;
   cout<<"Matrix of size : "<<n<<" in which sum of elements of all rows is equal is :\n";
   int prevMat[n][n], resultMat[n][n] ;
   int c = 1;
   for (i = 0; i < n; i++) {
      for (j = 0; j < n; j++)
      prevMat[i][j] = c++;
   }
   for (i = 0; i < n; i++) {
      for (<) {
         resultMat[i][j] = prevMat[j][((i+j)%n)];
      }
   }
   for (i = 0;i<n;i++) {
      for (j=0; j<n; j++) {
         cout<<resultMat[i][j]<<"\t";
      }
      cout<<endl;
   }
}

출력

Matrix of size : 4 in which sum of elements of all rows is equal is :
1 6 11 16
2 7 12 13
3 8  9 14
4 5 10 15