蛇形矩阵(c++)

蛇形矩阵

https://ac.nowcoder.com/acm/problem/22231

蛇形矩阵:

n*n内的数按蛇字形状排列

#思路

通过分别对左右上下角的行分析,发现其规律。

规律寻早

  • 图片说明

  • 图片说明

  • 通过对以上分析,

    奇偶阶左上角规律相同,但右下角规律(方向)稍微不同。

    代码如下

#include <iostream>
using namespace std;
void show(int n)
{//因为需要二位数组存储数据,但不能根据n来直接定义数组长度。
//因此动态开辟N*N的二维空间:
    int** p;
    p = new int* [n];
    for (int i = 0; i &lt; n; i++)
        p[i] = new int[n];
    int k = 1;
    if (n % 2 == 0)//判断n的奇偶性
    {
        //对上三角进行赋值;
        for (int i = 0; i &lt; n; i++)
            for (int j = 0; j &lt;= i; j++)
                if (i % 2 == 0)p[i - j][j] = k++;
                else p[j][i - j] = k++;
        //对下三角进行赋值:
        for (int i = 1; i &lt; n ; i++)
            for (int j = n - 1; j &gt;= i; j--)
                if (i % 2 == 0)
                    p[n - 1 + i - j][j] = k++;
                else p[j][n - 1 + i - j] = k++;
    }
    else
    {
        //对上三角进行赋值;
        for (int i = 0; i &lt; n; i++)
            for (int j = 0; j &lt;= i; j++)        
                if (i % 2 == 0)p[i - j][j] = k++;
                else p[j][i - j] = k++;
        //对下三角进行赋值:;
        for (int i = 1; i &lt; n; i++)
            for (int j = n - 1; j &gt;= i; j--)
                if (i % 2 == 0)
                    p[j][n - 1 +i - j] = k++;
                else p[n-1+i-j][j] = k++;
    }
    //输出n阶蛇形矩阵:
    for (int i = 0; i &lt; n; i++)
        for (int j = 0; j &lt; n; j++)
        {//竞赛一般用printf输出结果;
            printf("%d ", p[i][j]);
            if (j == n - 1)
                printf("\n");

        }
    //释放动态开辟的二维数组:
    delete p;
}
int main()
{
    int n;
    //输入n阶数据:
    cin &gt;&gt; n;
    show(n);

}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务