20.順時針打印矩陣(代碼測試未完成)

  題目:輸入一個矩陣。按照從外向裏以順時針的順序依次打印出每個數字。例如輸入以下矩陣:
 
                1      2      3      4ios

                5      6      7      8
           
                9      10     11     12數組

                13     14     15     16測試

打印出的數字爲:一、二、三、四、八、十二、1六、1五、1四、1三、九、五、六、七、十一、10spa


  思路:先判斷循環條件,由圖能夠發現當行數和列數都 > 循環起始點(左上角)* 2時,循環開始。
  能夠循環以後,就要打印一圈,打印一圈有以下幾種狀況:
  1.向左打印,這個是必須的。
  2.從上向下打印,此時終止行號要大於起始行號。
  3.從右向左打印,除了終止行號要大於起始行號外,還需終止列號要大於起始列號,也就是至少兩行兩列。
  4.從下往上打印,至少須要三行兩列,也就是終止行號要比起始行號大2,終止列號要大於起始列號code

  測試實例:數組中有多行多列、只有一行或者一列、只有一行一列。io

#include<iostream>
using namespace std;

void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
{
    int endX = columns - 1 - start;
    int endY = rows - 1 - start;

    //從左到友打印一行
    for (int i = start; i <= endX; i++)
    {
        int number = numbers[start][i];
        cout << number << " ";
    }

    //從上到下打印一列
    if (start < endY)
    {
        for (int i = start + 1; i <= endY; i++)
        {
            int number = numbers[i][endX];
            cout << number << " ";
        }
    }

    //從右到左打印一行
    if (start < endX && start < endY)
    {
        for (int i = endX - 1; i >= start; i--)
        {
            int number = numbers[endY][i];
            cout << number << " ";
        }
    }

    //從下到上打印一列
    if (start < endX && start < endY - 1)
    {
        for (int i = endY - 1; i >= start + 1; i--)
        {
            int number = numbers[i][start];
            cout << number << " ";
        }
    }

}

void PrintMatrixClockwisely(int** numbers, int columns, int rows)
{
    if (numbers == NULL || columns <= 0 || rows <= 0)
    {
        return;
    }

    int start = 0;

    while (columns > start * 2 && rows > start * 2)
    {
        PrintMatrixInCircle(numbers, columns, rows, start);

        ++start;
    }
}

void test1()
{
    int a[2][2] = {1, 2, 3, 4};
    PrintMatrixClockwisely((int**)a, 2, 2);
    /**for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            cout << a[i][j] << " ";
        }
    }**/

}

int main()
{
    test1();

    return 0;
}
相關文章
相關標籤/搜索