C++程序 将矩阵旋转45度

C++程序 将矩阵旋转45度

给定一个大小为 N*N 的矩阵 mat[][] ,任务是将矩阵旋转45度并打印矩阵。

例子:

输入: N = 6,

mat[][] = {{3, 4, 5, 1, 5, 9, 5},

{6, 9, 8, 7, 2, 5, 2},

{1, 5, 9, 7, 5, 3, 2},

{4, 7, 8, 9, 3, 5, 2},

{4, 5, 2, 9, 5, 6, 2},

{4, 5, 7, 2, 9, 8, 3}}

输出:

3

6 4

1 9 5

4 5 8 1

4 7 9 7 5

4 5 8 7 2 9

5 2 9 5 5

7 9 3 3

2 5 5

9 6

8

输入: N = 4,

mat[][] = {{2, 5, 7, 2},

{9, 1, 4, 3},

{5, 8, 2, 3},

{6, 4, 6, 3}}

输出:

2

9 5

5 1 7

6 8 4 2

4 2 3

6 3

3

方法: 按以下步骤解决问题:

  1. 使用计数器变量将对角线元素存储在列表中。
  2. 打印所需空格数,使输出呈现所需的模式。
  3. 反转列表元素后打印列表元素。
  4. 仅遍历对角线元素以优化操作所需的时间。

以下是上述方法的实现:

// C++程序:将矩阵旋转45度
#include <bits/stdc++.h>
using namespace std;
 
// 将矩阵旋转45度的函数
void matrix(int n, int m, vector<vector<int>> li)
{
     
    // 计数器变量
    int ctr = 0;
     
    while (ctr < 2 * n - 1)
    {
        for(int i = 0;
                i < abs(n - ctr - 1);
                i++)
        {
            cout << " ";
        }
         
        vector<int> lst;
 
        // 遍历 [0,m]
        for(int i = 0; i < m; i++)
        {
             
                // 遍历 [0,n]
            for(int j = 0; j < n; j++)
            {
                 
                // 对角线元素
                // 条件
                if (i + j == ctr)
                {
                     
                    // 将对角线元素添加到列表中
                    lst.push_back(li[i][j]);
                }
            }
        }
             
        // 打印反转的对角线元素
        for(int i = lst.size() - 1; i >= 0; i--)
        {
            cout << lst[i] << " ";
        }
        cout << endl;
        ctr += 1;
    }
}
 
// 主函数   
int main()
{
     
    // 矩阵的维数
    int n = 8;
    int m = n;
     
    // 给定的矩阵
    vector<vector<int>> li{
        { 4, 5, 6, 9, 8, 7, 1, 4 },
        { 1, 5, 9, 7, 5, 3, 1, 6 },
        { 7, 5, 3, 1, 5, 9, 8, 0 },
        { 6, 5, 4, 7, 8, 9, 3, 7 },
        { 3, 5, 6, 4, 8, 9, 2, 1 },
        { 3, 1, 6, 4, 7, 9, 5, 0 },
        { 8, 0, 7, 2, 3, 1, 0, 8 },
        { 7, 5, 3, 1, 5, 9, 8, 5 } };
     
    // 调用函数
    matrix(n, m, li);
 
    return 0;
}
 
// 此代码由divyeshrabadiya07贡献```  

输出:

       4
      1 5
     7 5 6
    6 5 9 9
   3 5 3 7 8
  3 5 4 1 5 7
 8 1 6 7 5 3 1
7 0 6 4 8 9 1 4
 5 7 4 8 9 8 6
  3 2 7 9 3 0
   1 3 9 2 7
    5 1 5 1
     9 0 0
      8 8
       5

时间复杂度: O(N 2 )

辅助空间: O(N),因为使用了向量的辅助空间

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例