c++实现蛇形矩阵总结

蛇形矩阵,百度了一下,是这么一个东西:

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:

c++实现蛇形矩阵总结

3:

c++实现蛇形矩阵总结

8:

c++实现蛇形矩阵总结

哈哈,见笑了。
原文链接: https://www.cnblogs.com/wuweixin/p/5355305.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/231409

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:01
下一篇 2023年2月13日 下午3:01

相关推荐