Given a positive integer N, the task is to construct a matrix of size N * N such that all the matrix elements are distinct from the range [1, N2] and the sum of elements in both the diagonals of every 2 * 2 submatrices is even.
Examples:
Input: N = 3
Output:
1 2 3
4 5 6
7 8 9
Explanation:
Diagonal elements of every 2 * 2 matrices in the output matrix are { {1, 5}, {2, 4}, {2, 6}, {3, 5}, {4, 8}, {5, 7}, {5, 9}, {6, 8} }. It can be observed that the sum of every diagonal is even.Input: N = 4
Output:
1 2 3 4
6 5 8 7
9 10 11 12
14 13 16 15
Approach: Follow the steps below to solve the problem:
- Initialize a matrix, say mat[][], to store the matrix elements such that all the matrix elements are distinct from the range [1, N2] and the sum of matrix elements in both the diagonals of every 2 * 2 submatrices is even.
- Initialize a variable, say odd = 1, to store odd numbers.
- Initialize a variable, say even = 2, to store even numbers.
- Fill all the matrix elements, mat[i][j], by checking the following conditions:
- If (i + j) % 2 = 0, then set mat[i][j] = odd and update odd += 2.
- Otherwise, set mat[i][j] = even and update even += 2.
- Finally, print the matrix mat[][].
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to construct a matrix such that // the sum elements in both diagonals of // every 2 * 2 matrices is even void generateMatrix( int N) { // Stores odd numbers int odd = 1; // Stores even numbers int even = 2; // Store matrix elements such that // sum of elements in both diagonals // of every 2 * 2 submatrices is even int mat[N + 1][N + 1]; // Fill all the values of // matrix elements for ( int i = 1; i <= N; i++) { for ( int j = 1; j <= N; j++) { if ((i + j) % 2 == 0) { mat[i][j] = odd; // Update odd odd += 2; } else { mat[i][j] = even; // Update even even += 2; } } } // Print the matrix for ( int i = 1; i <= N; i++) { for ( int j = 1; j <= N; j++) { cout << mat[i][j] << " " ; } cout << endl; } } // Driver Code int main() { int N = 4; generateMatrix(N); return 0; } |
Java
// Java program for the above approach import java.io.*; class GFG{ // Function to construct a matrix such that // the sum elements in both diagonals of // every 2 * 2 matrices is even static void generateMatrix( int N) { // Stores odd numbers int odd = 1 ; // Stores even numbers int even = 2 ; // Store matrix elements such that // sum of elements in both diagonals // of every 2 * 2 submatrices is even int [][] mat = new int [N + 1 ][N + 1 ]; // Fill all the values of // matrix elements for ( int i = 1 ; i <= N; i++) { for ( int j = 1 ; j <= N; j++) { if ((i + j) % 2 == 0 ) { mat[i][j] = odd; // Update odd odd += 2 ; } else { mat[i][j] = even; // Update even even += 2 ; } } } // Print the matrix for ( int i = 1 ; i <= N; i++) { for ( int j = 1 ; j <= N; j++) { System.out.print(mat[i][j] + " " ); } System.out.println(); } } // Driver Code public static void main(String[] args) { int N = 4 ; generateMatrix(N); } } // This code is contributed by Dharanendra L V |
Python3
# Python program for the above approach # Function to construct a matrix such that # the sum elements in both diagonals of # every 2 * 2 matrices is even def generateMatrix(N): # Stores odd numbers odd = 1 ; # Stores even numbers even = 2 ; # Store matrix elements such that # sum of elements in both diagonals # of every 2 * 2 submatrices is even mat = [[ 0 for i in range (N + 1 )] for j in range (N + 1 )] ; # Fill all the values of # matrix elements for i in range ( 1 , N + 1 ): for j in range ( 1 , N + 1 ): if ((i + j) % 2 = = 0 ): mat[i][j] = odd; # Update odd odd + = 2 ; else : mat[i][j] = even; # Update even even + = 2 ; # Print the matrix for i in range ( 1 , N + 1 ): for j in range ( 1 , N + 1 ): print (mat[i][j], end = " " ); print (); # Driver Code if __name__ = = '__main__' : N = 4 ; generateMatrix(N); # This code is contributed by 29AjayKumar |
C#
// C# program for the above approach using System; class GFG{ // Function to construct a matrix such that // the sum elements in both diagonals of // every 2 * 2 matrices is even static void generateMatrix( int N) { // Stores odd numbers int odd = 1; // Stores even numbers int even = 2; // Store matrix elements such that // sum of elements in both diagonals // of every 2 * 2 submatrices is even int [,] mat = new int [N + 1, N + 1]; // Fill all the values of // matrix elements for ( int i = 1; i <= N; i++) { for ( int j = 1; j <= N; j++) { if ((i + j) % 2 == 0) { mat[i, j] = odd; // Update odd odd += 2; } else { mat[i, j] = even; // Update even even += 2; } } } // Print the matrix for ( int i = 1; i <= N; i++) { for ( int j = 1; j <= N; j++) { Console.Write(mat[i, j] + " " ); } Console.WriteLine(); } } // Driver Code static public void Main() { int N = 4; generateMatrix(N); } } // This code is contributed by Dharanendra L V |
Javascript
<script> // Javascript program of the above approach // Function to construct a matrix such that // the sum elements in both diagonals of // every 2 * 2 matrices is even function generateMatrix(N) { // Stores odd numbers let odd = 1; // Stores even numbers let even = 2; // Store matrix elements such that // sum of elements in both diagonals // of every 2 * 2 submatrices is even let mat = new Array(N + 1); // Loop to create 2D array using 1D array for ( var i = 0; i < mat.length; i++) { mat[i] = new Array(2); } // Fill all the values of // matrix elements for (let i = 1; i <= N; i++) { for (let j = 1; j <= N; j++) { if ((i + j) % 2 == 0) { mat[i][j] = odd; // Update odd odd += 2; } else { mat[i][j] = even; // Update even even += 2; } } } // Print the matrix for (let i = 1; i <= N; i++) { for (let j = 1; j <= N; j++) { document.write(mat[i][j] + " " ); } document.write( "<br/>" ); } } // Driver Code let N = 4; generateMatrix(N); </script> |
1 2 3 4 6 5 8 7 9 10 11 12 14 13 16 15
Time Complexity: O(N2)
Auxiliary Space: O(N2)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!