# Create matrix whose sum of diagonals in each sub matrix is even

Given a number N, the task is to create a square matrix of size N*N with values in range [1, N*N], such that the sum of each diagonal of an even sub-square matrix is even.

Examples:

Input: N = 3
Output:
1 2 3
4 5 6
7 8 9
Explanation:For each even sub-square matrix the sum of each diagonal is a even number.
1 2
4 5
sum of each diagonal is 6 and 6 i.e even number.

Input: N = 4
Output:
1 2 3 4
6 5 8 7
9 10 11 12
14 13 16 15
Explanation:
For each even sub-square matrix the sum of each diagonal is a even number.
1 2
6 5
sum of each diagonal is 6 and 8 i.e even number.

Approach: The idea is to arrange elements from 1 to N*N in the below-given ways:

1. Initialize odd and even by 1 and 2 elements respectively.
2. Iterate two nested loop in the range [0, N].
3. If the sum of indices in the two nested loops is even the print the value of odd and increment odd by 2 and if the sum is odd then print the value of even, and increment even by 2.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to print N*N order matrix ` `// with all sub-matrix of even order ` `// is sum of its diagonal also even ` `void` `evenSubMatrix(``int` `N) ` `{ ` `    ``// Even index ` `    ``int` `even = 1; ` ` `  `    ``// Odd index ` `    ``int` `odd = 2; ` ` `  `    ``// Iterate two nested loop ` `    ``for` `(``int` `i = 0; i < N; i++) { ` ` `  `        ``for` `(``int` `j = 0; j < N; j++) { ` ` `  `            ``// For even index the element ` `            ``// should be consecutive odd ` `            ``if` `((i + j) % 2 == 0) { ` `                ``cout << even << ``" "``; ` `                ``even += 2; ` `            ``} ` ` `  `            ``// for odd index the element ` `            ``// should be consecutive even ` `            ``else` `{ ` `                ``cout << odd << ``" "``; ` `                ``odd += 2; ` `            ``} ` `        ``} ` `        ``cout << ``"\n"``; ` `    ``} ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``// Given order of matrix ` `    ``int` `N = 4; ` ` `  `    ``// Function call ` `    ``evenSubMatrix(N); ` `    ``return` `0; ` `}`

## Java

 `// Java program for the above approach ` `import` `java.util.*; ` ` `  `class` `GFG{ ` ` `  `// Function to print N*N order matrix ` `// with all sub-matrix of even order ` `// is sum of its diagonal also even ` `static` `void` `evenSubMatrix(``int` `N) ` `{ ` `     `  `    ``// Even index ` `    ``int` `even = ``1``; ` ` `  `    ``// Odd index ` `    ``int` `odd = ``2``; ` ` `  `    ``// Iterate two nested loop ` `    ``for``(``int` `i = ``0``; i < N; i++)  ` `    ``{ ` `        ``for``(``int` `j = ``0``; j < N; j++)  ` `        ``{ ` `             `  `            ``// For even index the element ` `            ``// should be consecutive odd ` `            ``if` `((i + j) % ``2` `== ``0``) ` `            ``{ ` `                ``System.out.print(even + ``" "``); ` `                ``even += ``2``; ` `            ``} ` `             `  `            ``// For odd index the element ` `            ``// should be consecutive even ` `            ``else`  `            ``{ ` `                ``System.out.print(odd + ``" "``); ` `                ``odd += ``2``; ` `            ``} ` `        ``} ` `        ``System.out.println(); ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` `     `  `    ``// Given order of matrix ` `    ``int` `N = ``4``; ` `     `  `    ``// Function call ` `    ``evenSubMatrix(N); ` `} ` `} ` ` `  `// This code is contributed by offbeat `

## C#

 `// C# program for the above approach ` `using` `System; ` ` `  `class` `GFG{ ` ` `  `// Function to print N*N order matrix ` `// with all sub-matrix of even order ` `// is sum of its diagonal also even ` `static` `void` `evenSubMatrix(``int` `N) ` `{ ` `     `  `    ``// Even index ` `    ``int` `even = 1; ` ` `  `    ``// Odd index ` `    ``int` `odd = 2; ` ` `  `    ``// Iterate two nested loop ` `    ``for``(``int` `i = 0; i < N; i++)  ` `    ``{ ` `        ``for``(``int` `j = 0; j < N; j++)  ` `        ``{ ` `             `  `            ``// For even index the element ` `            ``// should be consecutive odd ` `            ``if` `((i + j) % 2 == 0) ` `            ``{ ` `                ``Console.Write(even + ``" "``); ` `                ``even += 2; ` `            ``} ` `             `  `            ``// For odd index the element ` `            ``// should be consecutive even ` `            ``else` `            ``{ ` `                ``Console.Write(odd + ``" "``); ` `                ``odd += 2; ` `            ``} ` `        ``} ` `        ``Console.WriteLine(); ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` `     `  `    ``// Given order of matrix ` `    ``int` `N = 4; ` `     `  `    ``// Function call ` `    ``evenSubMatrix(N); ` `} ` `} ` ` `  `// This code is contributed by amal kumar choubey `

Output:

```1 2 3 4
6 5 8 7
9 10 11 12
14 13 16 15
```

Time Complexity: O(N*N)
Auxiliary Space: O(1)

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.

My Personal Notes arrow_drop_up If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.