一、题目描述
在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(p x
q)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 p和q ,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。
如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
C++程序要求输入输出格式如下:(和原题目的输入输出要求略有不同)
输入:
第一行输入m,n,表示原始矩阵的行数和列数。
第二行到第m+1行输入原始矩阵的各数据。
第m+2行输入p,q,表示重塑的矩阵的行数和列数。
输出:
重塑后的矩阵
示例如下:
输入:3 4
1 2 3 4
5 6 7 8
9 10 11 12
2 6
输出:1 2 3 4 5 6
7 8 9 10 11 12
二、思路
for循环接收输入的原始矩阵数据,输出时注意按按照新矩阵的列数来换行输出。
三、C++代码
#include<bits/stdc++.h>
using namespace std;
//重塑矩阵
int main(){
int m,n;
cin>>m>>n;
int a[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
}
}
int p,q;
cin>>q>>q;
int number=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
number++;
cout<<a[i][j]<<" ";
if(number%q==0){
cout<<endl;
}
}
}
}