MATLAB中如何统计1之间的连续0个数?求修正错误代码
问题分析与代码修改
原代码问题
你的代码会遍历每个元素并记录当前累计的连续0个数,最终输出的是每个位置对应的累计值,这和需求中“相邻1之间的连续0个数”的要求不符。需求需要捕捉三类0的数量:
- 第一个1之前的连续0个数
- 每两个相邻1之间的连续0个数
- 最后一个1之后的连续0个数
修改后的代码
function y = count_zero(x) y = []; count = 0; % 标记是否已遇到第一个1 found_first_one = false; for i = 1:length(x) if x(i) == 0 count = count + 1; else % 遇到1时,将累计的0数加入结果 y = [y, count]; found_first_one = true; count = 0; % 重置计数 end end % 处理最后一个1之后的剩余0 if found_first_one y = [y, count]; else % 输入全为0时,直接返回总个数 y = [count]; end end
验证示例输入
输入向量 [0 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 0 0],运行修改后的代码会输出 [1 3 1 0 0 3 1 0 2],完全符合需求。
代码逻辑说明
- 初始化计数变量和第一个1的标记位
- 遍历输入向量:
- 遇到0时累计计数
- 遇到1时,将当前累计的0数加入结果列表,随后重置计数
- 遍历结束后,将最后一段(最后一个1之后)的0数补充到结果中
- 特殊处理全0输入的情况,直接返回总0数
内容的提问来源于stack exchange,提问作者Nourhan Khalil
相关产品推荐
相关产品推荐

