Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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>


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)



Last Updated : 15 Feb, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads