📌  相关文章
📜  在矩阵中放置 N^2 个数字,使得每一行的总和相等

📅  最后修改于: 2021-10-27 06:20:19             🧑  作者: Mango

给定一个数字 N,将范围 [1, N 2 ] 中的数字放置在一个 NxN 矩阵中,使得每行的总和相等。

例子:

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

已使用贪婪方法来填充矩阵,其中矩阵中元素的插入是按行进行的。可以使用以下步骤获得所需的矩阵:

  • 使用矩阵遍历首先用 [1, N 2 ] 范围内的数字填充矩阵。
  • 遍历矩阵并通过answer[i][j] = mat[j][(i+j)%n]改变新矩阵中的每个位置,将其视为答案矩阵

下面是上述方法的实现:

C++
// C++ program to distribute n^2 numbers
// to n people
#include 
using namespace std;
 
vector> solve(vector> arr,
                          int n)
{
     
    // 2D array for storing the final result
    vector> ans(n, vector (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> arr, int n)
{
    vector> 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> makeArray(int n)
{
    vector> arr(n, vector(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> 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


输出:
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

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程