Given a number N, place numbers from the range [1, N2] in an NxN matrix such that sum in every row is equal.
Examples:
Input: N = 3 Output: 1 5 9 2 6 7 3 4 8 Sum in 1st row: 15 Sum in 2nd row: 15 Sum in 2nd row: 15 Input: N = 5 Output: 1 7 13 19 25 2 8 14 20 21 3 9 15 16 22 4 10 11 17 23 5 6 12 18 24
A Greedy Approach has been used to fill the matrix, where the insertion of elements in the matrix is done row-wise. The required matrix can be obtained using below steps:
- Fill the matrix initially with numbers in the range [1, N2] using matrix traversal.
- Traverse the matrix and change every position in a new matrix considering it as answer matrix by answer[i][j] = mat[j][(i+j)%n].
Below is the implementation of the above approach:
C++
// C++ program to distribute n^2 numbers // to n people #include <bits/stdc++.h> using namespace std;
vector<vector< int >> solve(vector<vector< int >> arr,
int n)
{ // 2D array for storing the final result
vector<vector< int >> ans(n, vector< int > (n, 0));
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
// Using modulo to go to the firs
// column after the last column
ans[i][j] = arr[j][(i + j) % n];
}
}
return ans;
} void show(vector<vector< int >> arr, int n)
{ vector<vector< int >> res = solve(arr, n);
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
cout << res[i][j] << " " ;
}
cout << endl;
}
} // Making a 2D array containing numbers vector<vector< int >> makeArray( int n)
{ vector<vector< int >> arr(n, vector< int >(n, 0));
int c = 1;
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
arr[i][j] = c;
c++;
}
}
return arr;
} // Driver code int main()
{ int n = 5;
vector<vector< int >> arr = makeArray(n);
show(arr, n);
return 0;
} // This code is contributed by divyesh072019 |
Java
// Java program to distribute n^2 numbers to n people public class Numbers {
public static int [][] solve( int [][] arr, int n)
{
// 2D array for storing the final result
int [][] ans = new int [n][n];
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
// using modulo to go to the firs
// column after the last column
ans[i][j] = arr[j][(i + j) % n];
}
}
return ans;
}
public static void show( int [][] arr, int n)
{
int [][] res = solve(arr, n);
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++) {
System.out.print(res[i][j] + " " );
}
System.out.println();
}
}
// making a 2D array containing numbers
public static int [][] makeArray( int n)
{
int [][] arr = new int [n][n];
int c = 1 ;
for ( int i = 0 ; i < n; i++) {
for ( int j = 0 ; j < n; j++)
arr[i][j] = c++;
}
return arr;
}
// Driver Code
public static void main(String[] args)
{
int n = 5 ;
int [][] arr = makeArray(n);
show(arr, n);
}
} |
Python3
# Python3 program to distribute n^2 # numbers to n people def solve(arr, n):
# 2D array for storing the final result
ans = [[ 0 for i in range (n)]
for j in range (n)]
for i in range (n):
for j in range (n):
# Using modulo to go to the firs
# column after the last column
ans[i][j] = arr[j][(i + j) % n]
return ans
def show(arr, n):
res = solve(arr, n)
for i in range (n):
for j in range (n):
print (res[i][j], end = " " )
print ()
# Making a 2D array containing numbers def makeArray(n):
arr = [[ 0 for i in range (n)]
for j in range (n)]
c = 1
for i in range (n):
for j in range (n):
arr[i][j] = c
c + = 1
return arr
# Driver Code n = 5
arr = makeArray(n)
show(arr, n) # This code is contributed by avanitrachhadiya2155 |
C#
// C# program to distribute n^2 // numbers to n people using System;
class GFG{
static int [,] solve( int [,] arr, int n)
{ // 2D array for storing the final result
int [,] ans = new int [n, n];
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
// Using modulo to go to the firs
// column after the last column
ans[i, j] = arr[j, (i + j) % n];
}
}
return ans;
} static void show( int [,] arr, int n)
{ int [,] res = solve(arr, n);
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
Console.Write(res[i, j] + " " );
}
Console.WriteLine();
}
} // Making a 2D array containing numbers static int [,] makeArray( int n)
{ int [,] arr = new int [n, n];
int c = 1;
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
arr[i, j] = c++;
}
return arr;
} // Driver code static void Main()
{ int n = 5;
int [,] arr = makeArray(n);
show(arr, n);
} } // This code is contributed by divyeshrabadiya07 |
Javascript
<script> // Javascript program to distribute n^2 numbers to n people function solve(arr, n)
{
// 2D array for storing the final result
let ans = new Array(n);
// Loop to create 2D array using 1D array
for ( var i = 0; i < ans.length; i++) {
ans[i] = new Array(2);
}
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
// using modulo to go to the firs
// column after the last column
ans[i][j] = arr[j][(i + j) % n];
}
}
return ans;
}
function show(arr, n)
{
let res = solve(arr, n);
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
document.write(res[i][j] + " " );
}
document.write( "<br/>" );
}
}
// making a 2D array containing numbers
function makeArray(n)
{
let arr = new Array(n);
// Loop to create 2D array using 1D array
for ( var i = 0; i < arr.length; i++) {
arr[i] = new Array(2);
}
let c = 1;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++)
arr[i][j] = c++;
}
return arr;
}
// driver program let n = 5;
let arr = makeArray(n);
show(arr, n);
// This code is contributed by susmitakundugoaldanga.
</script> |
Output
1 7 13 19 25 2 8 14 20 21 3 9 15 16 22 4 10 11 17 23 5 6 12 18 24
Complexity Analysis:
- Time Complexity: O(n2) where n is the given number.
- Auxiliary Space: O(n2)