蛇形矩阵(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 < n; i++)
p[i] = new int[n];
int k = 1;
if (n % 2 == 0)//判断n的奇偶性
{
//对上三角进行赋值;
for (int i = 0; i < n; i++)
for (int j = 0; j <= i; j++)
if (i % 2 == 0)p[i - j][j] = k++;
else p[j][i - j] = k++;
//对下三角进行赋值:
for (int i = 1; i < n ; i++)
for (int j = n - 1; j >= 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 < n; i++)
for (int j = 0; j <= i; j++)
if (i % 2 == 0)p[i - j][j] = k++;
else p[j][i - j] = k++;
//对下三角进行赋值:;
for (int i = 1; i < n; i++)
for (int j = n - 1; j >= 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 < n; i++)
for (int j = 0; j < n; j++)
{//竞赛一般用printf输出结果;
printf("%d ", p[i][j]);
if (j == n - 1)
printf("\n");
}
//释放动态开辟的二维数组:
delete p;
}
int main()
{
int n;
//输入n阶数据:
cin >> n;
show(n);
}
腾讯公司福利 1143人发布