给定大小为N * M的矩阵mat [] []以及两个正整数A和B ,任务是从给定的矩阵元素构造大小为A * B的矩阵。如果存在多个解决方案,则打印其中任何一种。否则,打印-1 。
Input: mat[][] = { { 1, 2, 3, 4, 5, 6 } }, A = 2, B = 3
Output: { { 1, 2, 3 }, { 4, 5, 6 } }
Explanation:
Since the size of the matrix { { 1, 2, 3 }, { 4, 5, 6 } } is A * B(2 * 3).
Therefore, the required output is { { 1, 2, 3 }, { 4, 5, 6 } }.
Input: mat[][] = { {1, 2}, { 3, 4 }, { 5, 6 } }, A = 1, B = 6
Output: { { 1, 2, 3, 4, 5, 6 } }
方法:请按照以下步骤解决问题:
- 初始化大小为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)