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

C++의 라틴 광장

<시간/>

라틴 스퀘어는 특별한 패턴을 가진 행렬입니다. 패턴을 살펴보기 위해 다양한 예를 살펴보겠습니다.

1 2
2 1

1 2 3
3 1 2
2 3 1

1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1

위의 예에서 알 수 있듯이 라틴 사각형은 크기가 다릅니다. 그러나 위의 행렬의 패턴을 주의 깊게 관찰하면 이전 행의 마지막 숫자가 다음 행의 첫 번째 요소로 오는 것을 알 수 있습니다.

라틴 광장에 숨겨진 패턴입니다. 입력 n에 대해 위의 행렬을 생성하는 프로그램을 작성해야 합니다.

알고리즘

  • n은 원하는 숫자로 초기화합니다.
  • n + 1 값으로 숫자를 초기화하고 이를 first_half_end라고 합니다.
  • 1에서 n까지 반복하는 루프를 작성하십시오.
    • first_half_end의 값을 first_half_start라는 변수에 할당합니다.
    • first_half_start가 값 n에 도달할 때까지 루프를 작성합니다.
      • 반복 변수, 즉 first_half_start를 인쇄합니다.
    • 1에서 first_half_end까지 반복하는 루프를 작성합니다.
      • 반복 변수를 인쇄합니다.
    • first_half_end의 값을 1만큼 감소시킵니다.
    • 다음 행으로 이동합니다.

구현

다음은 위의 알고리즘을 C++로 구현한 것입니다.

#include <bits/stdc++.h>

using namespace std;

void generateLatinSquare(int n) {
   int first_half_end = n + 1;

   for (int i = 1; i <= n; i++) {
      int first_half_start = first_half_end;
      while (first_half_start <= n) {
         cout << first_half_start << " ";
         first_half_start++;
      }

      for (int second_half_start = 1; second_half_start < first_half_end; second_half_start++){
         cout << second_half_start << " ";
      }
      first_half_end--;
   cout << endl;
   }
   cout << endl;
}

int main(void) {
   generateLatinSquare(2);
   generateLatinSquare(3);
   generateLatinSquare(4);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

1 2
2 1

1 2 3
3 1 2
2 3 1

1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1