Skip to content
Related Articles

Related Articles

Improve Article

Generate a matrix having even sum of all diagonals in each 2 x 2 submatrices

  • Last Updated : 04 May, 2021

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;
 
    # Prthe 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;
            }
        }
    }
  
    // Prlet 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>
Output: 
1 2 3 4 
6 5 8 7 
9 10 11 12 
14 13 16 15

 

Time Complexity: O(N2)
Auxiliary Space: O(N2)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :