騰訊筆試題:蛇形矩陣

題目: 蛇形矩陣,是由1開始的自然數一次排列成的N*N的正方形矩陣,數字依次由外而內的遞增,如下面實例:
N=3時:
1 2 3
8 9 4
7 6 5
N=6時:
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
要求:輸入蛇形矩陣寬度,輸出蛇形矩陣結果。

將矩陣像剝洋蔥一樣,層層剝離,每一次循環爲矩陣的這一層賦值,若矩陣寬度爲偶數,則矩陣無心,若寬度爲奇數,則矩陣有心(單獨的一個數),對於這種情況需要單獨處理。

#include<iostream>
using namespace std;

void print(int n)
{
    int **matrix = new int*[n];//建立二維數組
    for (int k = 0; k < n; k++)
    {
        matrix[k] = new int[n];
    }
    int circle = 0;//循環次數
    int v = 1;//矩陣初值
    int i = 0, j = 0;
    while (n-2*circle>=2)//以n-2*circle作爲mark,若矩陣寬度爲偶數,mark取到2時,矩陣賦值結束;若矩陣寬度爲奇數,mark會取到1,此時需要單獨處理。
    {
        for (j=circle; j < n-circle; j++)
        {
            matrix[i][j] = v;
            v++;
        }
        j--;
        i++;
        for (i; i < n-circle; i++)
        {
            matrix[i][j] = v;
            v++;
        }
        i--;
        j--;
        for (j; j >= circle; j--)
        {
            matrix[i][j] = v;
            v++;
        }
        j++;
        i--;
        for (i; i > circle; i--)
        {
            matrix[i][j] = v;
            v++;
        }
        i++;
        circle++;
    }
    if (n-2*circle == 1)
    {
        j = circle;
        matrix[i][j] = v;
    }
    for (i = 0; i < n; i++)//輸出矩陣
    {
        for (j = 0; j < n; j++)
        {
            cout << matrix[i][j]<<" ";
        }
        cout << endl;
    }
}
int main( )
{
    int N;
    cin >> N;
    print(N);
    return 0;
}

如下爲運行結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章