You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何在二维矩阵中查找4个垂直连续的1并返回首个坐标

实现逻辑说明与修正代码

现有代码问题

  • 数组下标越界:原代码内层循环j从width=6开始遍历,而数组列的合法下标范围是0~5,会访问非法内存
  • 计数逻辑错误:原代码的count全局统计所有1的数量,没有按列统计连续1的长度,也没有判断是否满足长度为4的要求

正确实现逻辑

因为要找垂直方向(同一列)的连续1序列,所以按以下步骤实现:

  1. 优先遍历所有列,每进入新的一列时,重置连续1的计数器为0
  2. 在当前列内逐行遍历判断:
    • 如果当前位置值为1,计数器加1,当计数器刚好等于4时,说明从当前行往前数3行的位置,就是长度为4的连续1序列的首个元素,直接输出对应坐标即可
    • 如果当前位置值不为1,直接重置计数器为0

修正后代码

#include <stdio.h>
#include <stdlib.h>

int length = 5, width = 6;

int main() {
    int arr[5][6] = { { 1,  1,  8,  4,  1,  1 },
                      { 7,  1,  2,  6,  1,  8 },
                      { 7,  1,  2,  4 , 1,  4 },
                      { 7,  1,  6,  2,  1,  8 },
                      { 0,  0,  3,  3,  6,  6 },
                    };
    // 遍历每一列
    for (int j = 0; j < width; j++) {
        int consecutive = 0;
        // 遍历当前列的每一行
        for (int i = 0; i < length; i++) {
            if (arr[i][j] == 1) {
                consecutive++;
                // 连续长度刚好为4时输出首坐标
                if (consecutive == 4) {
                    printf("arr[%d][%d]\n", i - 3, j);
                }
            } else {
                // 遇到非1重置计数
                consecutive = 0;
            }
        }
    }
    return 0;
}

运行输出结果

arr[0][1]
arr[0][4]

内容的提问来源于stack exchange,提问作者Mn Nm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:24:07