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

C++의 2D 행렬에 동심 직사각형 패턴 인쇄


이 문제에서는 2D 행렬에 직사각형 패턴을 인쇄해야 합니다. 서로 동심원이 되도록 합니다.

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

For n=4 is :
   4 4 4 4 4 4 4
   4 3 3 3 3 3 4
   4 3 2 2 2 3 4
   4 3 2 1 2 3 4
   4 3 2 2 2 3 4
   4 3 3 3 3 3 4
   4 4 4 4 4 4 4

여기서 n, 정수 값을 취하여 위와 같이 패턴을 인쇄하고 동심 직사각형을 −

로 인쇄해야 합니다.
n  n   n   n  n
n n-1 n-1 n-1 n
n n-1 n-2 n-1 n
n n-1 n-1 n-1 n
n  n   n   n  n

이제 이 문제에서 볼 수 있듯이 (2n-1) 총 2D 행렬의 열과 행. 이 2D 매트릭스는 두 부분으로 인쇄됩니다. 상위 값은 0 ~ (2n-1)/2입니다. 아래쪽 절반은 ((2n-1)/2+1) ~ 2n-2입니다. .

이제, 각 행은 숫자가 행 수, 즉 1에서 i까지(행 수)에 도달할 때까지 값을 1씩 감소시킵니다. 그런 다음 숫자를 다시 n으로 증가시킵니다.

예시

이 논리를 사용하여 문제를 해결하는 프로그램을 만들 수 있습니다.

#include <bits/stdc++.h>
using namespace std;
void print2Dsequence(int n){
   int s = 2 * n - 1;
   for (int i = 0; i < (s / 2) + 1; i++) {
      int m = n;
      for (int j = 0; j < i; j++) {
         cout << m << " ";
         m--;
      }
      for (int k = 0; k < s - 2 * i; k++) {
         cout << n - i << " ";
      }
      m = n - i + 1;
      for (int l = 0; l < i; l++) {
         cout << m << " ";
         m++;
      }
      cout << endl;
   }
   for (int i = s / 2 - 1; i >= 0; i--) {
      int m = n;
      for (int j = 0; j < i; j++) {
         cout << m << " ";
         m--;
      }
      for (int k = 0; k < s - 2 * i; k++) {
         cout << n - i << " ";
      }
      m = n - i + 1;
      for (int l = 0; l < i; l++) {
         cout << m << " ";
         m++;
      }
      cout << endl;
   }
}
int main(){
   int n = 4;
   cout<<"The sequence of concurrent rectangle of 4 is : \n";
   print2Dsequence(n);
   return 0;
}

출력

4의 동시 사각형의 순서는 -

입니다.
4 4 4 4 4 4 4
4 3 3 3 3 3 4
4 3 2 2 2 3 4
4 3 2 1 2 3 4
4 3 2 2 2 3 4
4 3 3 3 3 3 4
4 4 4 4 4 4 4