个人技术分享

题目描述

定义一个矩阵类,其中包含了矩阵的维数,矩阵,以及需要的方法 

为该矩阵类定义一个拷贝构造函数,复制另一个矩阵对象的矩阵。

对复制矩阵类对象的矩阵进行右旋操作。

比如现在有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;
}

需要注意的是这道题目的输出格式。