给一个MXN的矩阵,从左上角开始,顺时针打印该矩阵

编程入门 行业动态 更新时间:2024-10-15 04:24:23

给一个MXN的<a href=https://www.elefans.com/category/jswz/34/1769510.html style=矩阵,从左上角开始,顺时针打印该矩阵"/>

给一个MXN的矩阵,从左上角开始,顺时针打印该矩阵

  1. 单纯的打印矩阵我们都会。直接一个双重循环即可,但是如何从左上角开始,顺时针打印矩阵呢。我们可以设置四个变量,left,rigth,up,down分别表示当前矩阵没有打印的的边界距离,up=1.说明第一行已经打印,这样,我们向上遍历的时候,i=1的时候就可以停止了。同理,rigth,up,down也有类似的功能。代码如下:
  2. #include
    #include
    #include
    using namespace std;
    enum Dir {Up,Down,Left,Right};
    int main()
    {
    srand((unsigned)time(NULL));
    int **matrix;
    int n = 2;
    int m = 5;
    matrix = new int [n];
    for (int i = 0; i < n; i++)
    {
    matrix[i] = new int[m];
    }
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    {
    matrix[i][j] = rand() % 50;
    }
    }
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    {
    cout << matrix[i][j] << “\t”;
    }
    cout << endl;
    }
    int left = 0;
    int right = m;
    int up = 0;
    int down = n;
    Dir cur = Right;
    int istart = 0;
    int jstart = 0;
    int sum = 0;
    while (left <= right || up <= down)
    {
    if (sum == m
    n)//先这么控制,因为在N和M不相等的时候,容易导致left <= right || up <= down始终有一个条件成立,出现死循环,导致bug。通过矩阵的元素个数可以实现控制。这个限制以后在考虑怎么修改。
    {
    break;
    }
    switch (cur)
    {
    case Right:
    jstart = left;
    while (jstart < right)
    {
    cout << matrix[istart][jstart] << " ";
    sum++;
    jstart++;
    }
    jstart–;//使jstart在矩阵范围内
    up++;//更新上边界,更新打印的限制
    cur = Down;
    break;
    case Down:
    istart = up;
    while (istart < down)
    {
    cout << matrix[istart][jstart] << " ";
    sum++;
    istart++;
    }
    istart–;使istart在矩阵范围内
    right–;更新右边界,更新打印的限制
    cur = Left;
    break;
    case Left:
    jstart = right-1;
    while (jstart >= left)
    {
    cout << matrix[istart][jstart] << " ";
    sum++;
    jstart–;
    }
    jstart++;使jstart在矩阵范围内
    down–;更新下边界,更新打印的限制
    cur = Up;
    break;
    case Up:
    istart = down-1;
    while (istart >= up)
    {
    cout << matrix[istart][jstart] << " ";
    sum++;
    istart–;
    }
    istart++;使istart在矩阵范围内
    left++;更新左边界,更新打印的限制
    cur = Right;
    break;
    }
    }
    system(“pause”);
    return 0;
    }
    执行结果如下:

    加了那个控制的花,可以比较好的打印结果。

更多推荐

给一个MXN的矩阵,从左上角开始,顺时针打印该矩阵

本文发布于:2024-02-26 09:16:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701994.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:矩阵   左上角   顺时针   MXN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!