📜  将矩阵转换为给定尺寸的另一个矩阵

📅  最后修改于: 2021-04-23 22:17:16             🧑  作者: Mango

给定大小为N * M的矩阵mat [] []以及两个正整数AB ,任务是从给定的矩阵元素构造大小为A * B的矩阵。如果存在多个解决方案,则打印其中任何一种。否则,打印-1

方法:请按照以下步骤解决问题:

  • 初始化大小为A * B的矩阵,例如res [] []
  • 遍历矩阵mat [] []并将矩阵的每个元素插入矩阵res [] []中
  • 最后,打印矩阵res [] []

下面是上述方法的实现:

C++
// C++ program to implement
// the above approach
#include 
using namespace std;
 
// Function to construct a matrix of size
// A * B from the given matrix elements
void ConstMatrix(int* mat, int N, int M,
                 int A, int B)
{
    if (N * M != A * B)
        return;
         
    int idx = 0;
 
    // Initialize a new matrix
    int res[A][B];
 
    // Traverse the matrix, mat[][]
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B][idx % B] = *((mat + i * M) + j);
 
            // Update idx
            idx++;
        }
    }
 
    // Print the resultant matrix
    for(int i = 0; i < A; i++)
    {
        for(int j = 0; j < B; j++)
            cout << res[i][j] << " ";
             
        cout << "\n";
    }
}
 
// Driver Code
int main()
{
    int mat[][6] = { { 1, 2, 3, 4, 5, 6 } };
    int A = 2;
    int B = 3;
     
    int N = sizeof(mat) / sizeof(mat[0]);
    int M = sizeof(mat[0]) / sizeof(int);
     
    ConstMatrix((int*)mat, N, M, A, B);
     
    return 0;
}
 
// This code is contributed by subhammahato348


Java
// Java program to implement
// the above approach
import java.util.*;
class GFG
{
 
// Function to cona matrix of size
// A * B from the given matrix elements
static void ConstMatrix(int[][] mat, int N, int M,
                 int A, int B)
{
    if (N * M != A * B)
        return;
         
    int idx = 0;
 
    // Initialize a new matrix
    int [][]res = new int[A][B];
 
    // Traverse the matrix, mat[][]
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B][idx % B] = mat[i][j];
 
            // Update idx
            idx++;
        }
    }
 
    // Print the resultant matrix
    for(int i = 0; i < A; i++)
    {
        for(int j = 0; j < B; j++)
            System.out.print(res[i][j] + " ");           
        System.out.print("\n");
    }
}
 
// Driver Code
public static void main(String[] args)
{
    int mat[][] = { { 1, 2, 3, 4, 5, 6 } };
    int A = 2;
    int B = 3;   
    int N = mat.length;
    int M = mat[0].length;   
    ConstMatrix(mat, N, M, A, B);   
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program to implement
# the above approach
 
 
# Function to construct a matrix of size A * B
# from the given matrix elements
def ConstMatrix(mat, N, M, A, B):
    if (N * M != A * B):
        return -1
    idx = 0;
     
     
    # Initialize a new matrix
    res = [[0 for i in range(B)] for i in range(A)]
     
     
    # Traverse the matrix, mat[][]
    for i in range(N):
        for j in range(M):
            res[idx//B][idx % B] = mat[i][j];
             
             
            # Update idx
            idx += 1
     
     
    # Print the resultant matrix
    for i in range(A):
        for j in range(B):
            print(res[i][j], end = " ")
        print()
 
 
 
# Driver Code
if __name__ == '__main__':
     
    mat = [ [ 1, 2, 3, 4, 5, 6 ] ]
    A = 2
    B = 3
    N = len(mat)
    M = len(mat[0])
    ConstMatrix(mat, N, M, A, B)


C#
// C# program to implement
// the above approach
using System;
class GFG
{
 
// Function to cona matrix of size
// A * B from the given matrix elements
static void ConstMatrix(int[,] mat, int N, int M,
                 int A, int B)
{
    if (N * M != A * B)
        return;       
    int idx = 0;
 
    // Initialize a new matrix
    int [,]res = new int[A,B];
 
    // Traverse the matrix, [,]mat
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        {
            res[idx / B, idx % B] = mat[i, j];
 
            // Update idx
            idx++;
        }
    }
 
    // Print the resultant matrix
    for(int i = 0; i < A; i++)
    {
        for(int j = 0; j < B; j++)
            Console.Write(res[i, j] + " ");           
        Console.Write("\n");
    }
}
 
// Driver Code
public static void Main(String[] args)
{
    int [,]mat = {{ 1, 2, 3, 4, 5, 6 }};
    int A = 2;
    int B = 3;   
    int N = mat.GetLength(0);
    int M = mat.GetLength(1);   
    ConstMatrix(mat, N, M, A, B);   
}
}
 
// This code is contributed by 29AjayKumar


输出:
1 2 3 
4 5 6

时间复杂度: O(N * M)
辅助空间: O(N * M)