蛇形矩阵(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); }