赞
踩
题目描述
定义一个矩阵类,其中包含了矩阵的维数,矩阵,以及需要的方法
为该矩阵类定义一个拷贝构造函数,复制另一个矩阵对象的矩阵。
对复制矩阵类对象的矩阵进行右旋操作。
比如现在有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;
- }
需要注意的是这道题目的输出格式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。