c++實現蛇形矩陣總結


蛇形矩陣,百度了一下,是這么一個東西:

像一條蛇一樣依次遞增。

我想,竟然做了螺旋矩陣,那做一下這個吧。在之前的螺旋矩陣的main函數基礎上,寫個函數接口就行了,這一次做的很快,但是這個矩陣感覺比螺旋要難。

我的思路是這樣的,先輸出左邊的矩陣(包括對角線),再輸出左邊的矩陣(不包括對角線)。

看上圖,因為我是一條對角線一條對角線這樣賦值的,所以左邊矩陣應該要賦值 n次,右邊是n-1次。

而外層循環的次數是偶數的時候,也就是這樣:

上圖的1,然后是:4->5->6,然后是:11->12->13->14->15這些是從上往下遞增,然后奇數的循環是從下往上地址。基於這個很快就可以寫出程序了,代碼是這樣的:

#include <iostream>

using namespace std;


void snakeLikeMat(int **a, int n)
{
    int num = 1;
    int total = n*n;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i % 2 == 0)
            {
                a[j][i - j] = num++;
            }
            else
            {
                a[i - j][j] = num++;
            }
        }
        
    }
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            if (i%2==0)
            {
                a[n - 1 - j][n - 1 - i + j] = total--;
            }
            else
            {
                a[n - 1 - i + j][n - 1 - j] = total--;
            }
        }
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    
    int ha = 0;
    cin >> ha;
    int **a = new int*[ha];
    for (int i = 0; i < ha; i++)
    {
        a[i] = new int[ha];
    }
    snakeLikeMat(a, ha);
    for (int i = 0; i < ha; i++)
    {
        for (int j = 0; j < ha; j++)
        {
            cout << a[i][j] << "\t";
        }
        cout << endl;
    }
    for (int i = 0; i < ha; i++)
    {
        delete [] a[i];
    }
    delete[] a;
    return 0;
}

兩個外層for循環分別是左矩陣和右矩陣。運行結果,取什么呢

1,3,8吧

1:

3:

8:

哈哈,見笑了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM