题目描述
定义一个矩阵类,其中包含了矩阵的维数,矩阵,以及需要的方法
为该矩阵类定义一个拷贝构造函数,复制另一个矩阵对象的矩阵。
对复制矩阵类对象的矩阵进行右旋操作。
比如现在有2*3矩阵 :
1 2 3
4 5 6
向右旋转90度后的矩阵变为:
4 1
5 2
6 3
要求:矩阵类内的矩阵需要使用new方法,动态生成,并且在调用结束后使用析构函数释放空间。
输入
第一行输入t表示有t个测试实例
连续m行,输入矩阵维数m和n,然后输入一个m*n的矩阵的数据
依次输入t个实例
输出
依次输出右转前后的矩阵
在输出的每行中,每个数据之间都用空格隔开
//
输入示例:
2
2 3
1 2 3
4 5 6
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出示例:
before:
1 2 3
4 5 6
after:
4 1
5 2
6 3
before:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
after:
13 9 5 1
14 10 6 2
15 11 7 3
16 12 8 4
AC代码:
#include <iostream>
using namespace std;
class Matrix
{
private:
int rows;
int cols;
int **data;
public:
Matrix(int m, int n) : rows(m), cols(n)
{
data = new int *[rows];
for (int i = 0; i < rows; ++i)
{
data[i] = new int[cols];
}
}
Matrix(const Matrix &matrix) : rows(matrix.rows), cols(matrix.cols)
{
data = new int *[rows];
for (int i = 0; i < rows; ++i)
{
data[i] = new int[cols];
for (int j = 0; j < cols; ++j)
{
data[i][j] = matrix.data[i][j];
}
}
}
~Matrix()
{
for (int i = 0; i < rows; ++i)
{
delete[] data[i];
}
delete[] data;
}
void rotate(int **shuzu)
{
int **rotatedData = new int *[cols];
for (int i = 0; i < cols; ++i)
{
rotatedData[i] = new int[rows];
}
for (int i = 0; i < cols; ++i)
{
for (int j = 0; j < rows; ++j)
{
rotatedData[i][j] = shuzu[rows - j - 1][i];
}
}
for (int i = 0; i < rows; ++i)
{
delete[] data[i];
}
delete[] data;
data = rotatedData;
swap(rows, cols);
}
void setData(int row, int col, int value)
{
data[row][col] = value;
}
void print()
{
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < cols - 1; ++j)
{
cout << data[i][j] << " ";
}
cout << data[i][cols - 1];
cout << endl;
}
}
int **geta()
{
return data;
}
};
int main()
{
int t;
cin >> t;
while (t--)
{
int m, n;
cin >> m >> n;
Matrix matrix(m, n);
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
int value;
cin >> value;
matrix.setData(i, j, value);
}
}
cout << "before:" << endl;
matrix.print();
matrix.rotate(matrix.geta());
cout << "after:" << endl;
matrix.print();
cout << endl;
}
return 0;
}
需要注意的是这道题目的输出格式。