logo

ラテン広場

ラテン方陣は、各行と列に 1 回ずつ出現する n 個の異なる数字で埋められた n x n のグリッドです。入力 n が与えられると、各行と各列に 1 回ずつ現れる 1 から n までの数値で構成される n x n 行列を出力する必要があります。

例:  

Input: 3 Output: 1 2 3 3 1 2 2 3 1 Input: 5 Output: 1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1

数字がラテン方格に格納されるパターンは見つかりましたか? 



  • 最初の行には、1 から n までの数値がシリアルに格納されます。
  • 2 行目では、数値が 1 列分右にシフトされます。つまり、2 列目に 1 が格納され、以下同様になります。
  • 3 行目では、数値が 2 列分右にシフトされます。つまり、1 が 3 列目に格納され、以下同様になります。
  • 残りの行についても同じ手順を続けます。

注記 : n x n ラテン方陣の可能な構成は複数ある場合があります。 

実装:

C++
// C++ program to print Latin Square #include    using namespace std; // Function to print n x n Latin Square void printLatin(int n) {  // A variable to control the rotation  // point.  int k = n+1;  // Loop to print rows  for (int i=1; i<=n; i++)  {  // This loops runs only after first  // iteration of outer loop. It prints  // numbers from n to k  int temp = k;  while (temp <= n)  {  cout << temp << ' ';  temp++;  }  // This loop prints numbers from 1 to k-1.  for (int j=1; j<k; j++)  cout << j << ' ';  k--;  cout << endl;  } } // Driver program to test above function int main(void) {  int n = 5;  // Invoking printLatin function  printLatin(n);  return 0; } // This code is contributed by kothavvsaakash. 
C
// C program to print Latin Square #include // Function to print n x n Latin Square void printLatin(int n) {  // A variable to control the rotation  // point.  int k = n+1;  // Loop to print rows  for (int i=1; i<=n; i++)  {  // This loops runs only after first  // iteration of outer loop. It prints  // numbers from n to k  int temp = k;  while (temp <= n)  {  printf('%d ' temp);  temp++;  }  // This loop prints numbers from 1 to k-1.  for (int j=1; j<k; j++)  printf('%d ' j);  k--;  printf('n');  } } // Driver program to test above function int main(void) {  int n = 5;  // Invoking printLatin function  printLatin(n);  return 0; } 
Java
// Java program to print Latin Square class GFG {    // Function to print n x n Latin Square  static void printLatin(int n)  {    // A variable to control the   // rotation point.  int k = n+1;    // Loop to print rows  for (int i = 1; i <= n; i++)  {  // This loops runs only after  // first iteration of outer   // loop. It prints  // numbers from n to k  int temp = k;  while (temp <= n)  {  System.out.print(temp + ' ');  temp++;  }    // This loop prints numbers from  // 1 to k-1.  for (int j = 1; j < k; j++)  System.out.print(j + ' ');    k--;  System.out.println();  }  }     // Driver code  public static void main (String[] args)  {  int n = 5;    // Invoking printLatin function  printLatin(n);  } } // This code is contributed by Anant Agarwal. 
Python 3
# Python 3 program to print Latin Square  # Function to print n x n Latin Square  def printLatin(n): # A variable to control the  # rotation point.  k = n + 1 # Loop to print rows  for i in range(1 n + 1 1): # This loops runs only after first  # iteration of outer loop. It prints  # numbers from n to k  temp = k while (temp <= n) : print(temp end = ' ') temp += 1 # This loop prints numbers # from 1 to k-1.  for j in range(1 k): print(j end = ' ') k -= 1 print() # Driver Code n = 5 # Invoking printLatin function  printLatin(n) # This code is contributed by R_Raj 
C#
// C# program to print Latin Square using System; class GFG {    // Function to print n x n  // Latin Square  static void printLatin(int n)  {    // A variable to control the   // rotation point.  int k = n + 1;    // Loop to print rows  for (int i = 1; i <= n; i++)  {  // This loops runs only after  // first iteration of outer   // loop. It prints numbers  // from n to k  int temp = k;  while (temp <= n)  {  Console.Write(temp + ' ');  temp++;  }    // This loop prints numbers from  // 1 to k-1.  for (int j = 1; j < k; j++)  Console.Write(j + ' ');    k--;  Console.WriteLine();  }  }     // Driver code  public static void Main ()  {  int n = 5;    // Invoking printLatin function  printLatin(n);  } } // This code is contributed by KRV. 
PHP
 // PHP program to print Latin Square // Function to print n x n Latin Square function printLatin( $n) { // A variable to control // the rotation point. $k = $n + 1; // Loop to print rows for ( $i = 1; $i <= $n; $i++) { // This loops runs only after // first iteration of outer loop. // It prints numbers from n to k $temp = $k; while ($temp <= $n) { echo $temp' '; $temp++; } // This loop prints numbers // from 1 to k-1. for ($j = 1; $j < $k; $j++) echo $j ' '; $k--; echo 'n'; } } // Driver Code $n = 5; // Invoking printLatin function printLatin($n); // This code is contributed by anuj_67. ?> 
JavaScript
<script>  // Javascript program to print Latin Square    // Function to print n x n  // Latin Square  function printLatin(n)  {    // A variable to control the   // rotation point.  let k = n + 1;    // Loop to print rows  for (let i = 1; i <= n; i++)  {    // This loops runs only after  // first iteration of outer   // loop. It prints numbers  // from n to k  let temp = k;    while (temp <= n)  {  document.write(temp + ' ');  temp++;  }    // This loop prints numbers from  // 1 to k-1.  for (let j = 1; j < k; j++)  document.write(j + ' ');    k--;  document.write('
'
); } } let n = 5; // Invoking printLatin function printLatin(n); </script>

出力
1 2 3 4 5 5 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 

時間計算量: O(n*n)
補助スペース: ○(1)