You need to enable JavaScript to run this app. C语言实现用户自定义大小二维数组的镜像性判断
优惠活动
大模型
产品
解决方案
定价
更多

C语言实现用户自定义大小二维数组的镜像性判断

功能实现问题修正方案

原代码核心问题

  • 变量语义混淆:将输入的行列数分别存入col/row后,又把col作为行遍历上限,逻辑完全颠倒
  • 硬编码数组大小:固定声明arr[10][10],无法支持用户输入的任意行列大小
  • 校验逻辑缺失:没有做对称位置元素的比对,仅倒序遍历列就直接打印结果,且会重复输出多次
  • 无全局校验标记:只要有一处对称位置不匹配就应该输出非镜像,原代码没有对应判断逻辑

修正后实现要点

  • 先读取行列数,再通过变长数组(C99及以上支持)动态声明二维数组,适配任意行列大小
  • 逐行遍历每行的前半段元素,比对当前元素与该行对称位置(col-1-j)的元素是否相等
  • 只要存在任意一组不匹配的元素,直接标记为非镜像,提前终止遍历
  • 仅当所有行的所有对称位置元素都相等时,才输出最终结果

完整可运行代码

#include <stdio.h>
int main()
{                       
    // 先读取行列数(输入第一个为行数row,第二个为列数col,匹配输入格式要求)
    int row, col;   
    scanf("%d %d", &row, &col);    

    // 动态声明变长数组,支持任意行列大小
    int arr[row][col];

    // 读取数组元素
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            scanf("%d", &arr[i][j]);
        }
    }       

    int is_mirror = 1; // 初始标记为是镜像数组
    // 逐行校验对称位置元素,只要标记为非镜像就自动终止外层循环
    for (int i = 0; i < row && is_mirror; i++) {
        // 只需要遍历到列数的一半即可,避免重复比对
        for (int j = 0; j < col / 2; j++) {
            // 比对当前元素与对称位置元素
            if (arr[i][j] != arr[i][col - 1 - j]) {
                is_mirror = 0;
                break;
            }
        }
    }

    // 输出最终结果
    printf("%s", is_mirror ? "Mirror" : "Not Mirror");
    return 0;
}

兼容性说明

如果需要兼容不支持变长数组的旧版C标准,可以改用malloc动态分配二维内存,逻辑完全一致:

动态分配示例:先通过int (*arr)[col] = malloc(sizeof(int[row][col])) 申请内存,用完后记得free(arr)释放即可。

测试示例

输入所有行对称位置元素相等的用例:

3 3
1 0 1
2 0 2
4 0 4

输出:Mirror

将第二行修改为2 0 3后,对称位置元素不匹配,输出:Not Mirror


内容的提问来源于stack exchange,提问作者Qwet Ruplet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 08:36:01