27

代码:

include <stdlib.h>

int max(int a, int b)
{
return a > b ? a : b;
}
// 返回较小值
int min(int a, int b)
{
return a < b ? a : b;
}

int main()
{
int n;
scanf("%d", &n);
int **matrix = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; ++i)
matrix[i] = (int *)malloc(n * sizeof(int));
int count = 0; // 之前填的
// 所有的对角线和s(i+j)
for (int s = 0; s <= 2 * n - 2; ++s)
{
int a = max(0, s - (n - 1)); // i的最小值
int b = min(s, n - 1);
if (s % 2 == 0)
{ // s为偶数,i从b到a(降序)
for (int i = b; i >= a; --i)
{
int j = s - i;
matrix[i][j] = ++count;
}
}
else
{ // s为奇,升序
for (int i = a; i <= b; ++i)
{
int j = s - i;
matrix[i][j] = ++count;
}
}
}
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
printf("%d", matrix[i][j]);
if (j != n - 1)
{ // 避免最后一个元素后输出空格
printf(" ");
}
}
printf("\n");
}
for (int i = 0; i < n; ++i)
free(matrix[i]);
free(matrix);

return 0;
}

bug:

收获:蛇形关键:对角线 + 交替方向。对角线由 i+j=k 定义,覆盖所有元素。偶数对角线从下往上填,奇数对角线从上往下填,形成“蛇形转弯”微信图片_20250701201121

posted @ 2025-07-01 10:14  ervgiu28hg34y827  阅读(6)  评论(0)    收藏  举报