Place N^2 numbers in matrix such that every row has an equal sum
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
Time Complexity: O(n2) where n is the given number.
Auxiliary Space: O(n2)