题解 | 蛇形矩阵

蛇形矩阵

https://www.nowcoder.com/practice/f228a074c5274619b26be544962375e1

2026年2月18日21:50:32,豆包提供的题解,提交通过

#include <stdio.h>

// 定义最大矩阵尺寸(满足n<=1000的要求)
#define MAX_SIZE 1000

int main() {
    int n;
    // 读取输入的整数n
    scanf("%d", &n);
    
    // 初始化n×n的矩阵,静态数组满足1000×1000的规模要求
    int matrix[MAX_SIZE][MAX_SIZE] = {0};
    int num = 1;  // 要填充的初始数字
    
    // 遍历所有对角线的和s(i+j,范围0到2*(n-1))
    for (int s = 0; s < 2 * n - 1; s++) {
        int start_i, end_i;
        // 确定当前对角线i的起始和结束范围
        if (s <= n - 1) {
            start_i = 0;
            end_i = s;
        } else {
            start_i = s - (n - 1);
            end_i = n - 1;
        }
        
        // 偶数和的对角线:从下往上填充(i递减)
        if (s % 2 == 0) {
            for (int i = end_i; i >= start_i; i--) {
                int j = s - i;
                matrix[i][j] = num++;
            }
        }
        // 奇数和的对角线:从上往下填充(i递增)
        else {
            for (int i = start_i; i <= end_i; i++) {
                int j = s - i;
                matrix[i][j] = num++;
            }
        }
    }
    
    // 输出矩阵,每行元素用空格分隔
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // 最后一个元素后不加多余空格(可选优化,兼容题目要求)
            if (j == n - 1) {
                printf("%d\n", matrix[i][j]);
            } else {
                printf("%d ", matrix[i][j]);
            }
        }
    }
    
    return 0;
}

代码关键解释

  1. 数组定义:用#define MAX_SIZE 1000限定最大矩阵尺寸,静态二维数组int matrix[MAX_SIZE][MAX_SIZE]满足 n≤1000 的需求(1000×1000 的 int 数组占用约 4MB 内存,完全符合 C 语言运行环境的内存限制)。
  2. 对角线遍历逻辑:核心依然是按i+j的和s遍历所有对角线,s的范围是0 ~ 2*(n-1)(矩阵右下角位置(n-1,n-1)的s = 2n-2)。根据s是否超过n-1,确定每行 i 的起始 / 结束值:s ≤ n-1:对角线从左上角延伸,i 从 0 到 s;s > n-1:对角线触达矩阵边缘,i 从s-(n-1)到n-1。
  3. 填充方向控制:偶数s:用for (int i = end_i; i >= start_i; i--)从下往上填充;奇数s:用for (int i = start_i; i <= end_i; i++)从上往下填充。
  4. 输出优化:输出时判断j == n-1,避免每行末尾出现多余空格(部分 OJ 平台对末尾空格敏感,此写法更通用)。

测试示例(输入 4)

编译运行代码后输入4,输出结果与示例完全一致:

plaintext

1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

总结

  1. C 语言实现的核心逻辑与 Python 一致,关键是通过静态二维数组适配矩阵存储,用 C 语言的循环语法实现对角线遍历和方向控制。
  2. 算法时间复杂度为O(n²),对于 n=1000 的场景,C 语言执行效率极高,无性能问题。
  3. 输出时的空格处理是细节优化,确保符合大多数编程题目的格式要求,避免因格式问题判错。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务