Computer >> Máy Tính >  >> Lập trình >> C ++

Hình vuông Latinh trong C ++

Hình vuông Latinh là một ma trận có một mẫu đặc biệt. Hãy xem các ví dụ khác nhau để kiểm tra mô hình.

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

Hình vuông Latinh mà bạn nhận được sẽ có kích thước khác như bạn nhận thấy trong các ví dụ trên. Tuy nhiên, nếu bạn quan sát cẩn thận mẫu của ma trận ở trên, bạn sẽ phát hiện ra rằng số cuối cùng của hàng trước đó là phần tử đầu tiên của hàng tiếp theo.

Đó là mô hình ẩn trong hình vuông Latinh. Chúng ta phải viết chương trình tạo ma trận trên cho đầu vào n.

Thuật toán

  • Khởi tạo chữ n với bất kỳ số nào bạn thích.
  • Khởi tạo một số với giá trị n + 1, gọi nó là first_half_end.
  • Viết một vòng lặp lặp lại từ 1 đến n cả hai.
    • Gán giá trị của first_half_end cho một biến được gọi là first_half_start.
    • Viết một vòng lặp cho đến khi first_half_start đạt đến giá trị n.
      • In biến lặp tức là .., first_half_start.
    • Viết một vòng lặp lặp lại từ 1 đến first_half_end.
      • In biến lặp.
    • Giảm giá trị của first_half_end đi 1.
    • Di chuyển hàng tiếp theo.

Thực hiện

Sau đây là cách thực hiện thuật toán trên trong 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;
}

Đầu ra

Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.

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