
matlab如何判断一组数是连续的?
已知A=[1291011]在A中,我们明显看到2组连续的数1291011matlab如何能够判断出有2组?并且输出这两个数组,即输出[12][91011]...
已知 A=[1 2 9 10 11]
在A中,我们明显看到2组连续的数
1 2
9 10 11
matlab如何能够判断出有2组?并且输出这两个数组,即输出[1 2] [9 10 11] 展开
在A中,我们明显看到2组连续的数
1 2
9 10 11
matlab如何能够判断出有2组?并且输出这两个数组,即输出[1 2] [9 10 11] 展开
3个回答
展开全部
clc;clear
A = [1 2 9 10 11 12 13 17 18 20 21 23 24];
c1 = 1;
arrset = cell(0,0);
while(c1<numel(A))
c2 = 0;
while (c1+c2+1<=numel(A)&&A(c1)+c2+1==A(c1+c2+1))
c2 = c2+1;
end
if(c2>=1)
arrset= [arrset;(A(c1:1:c1+c2))];
end
c1 = c1 + c2 +1;
end
fprintf('有%d组连续数:\n',numel(arrset))
celldisp(arrset) % 显示这些连续数
效果:
有5组连续数:
arrset{1} =
1 2
arrset{2} =
9 10 11 12 13
arrset{3} =
17 18
arrset{4} =
20 21
arrset{5} =
23 24
更多追问追答
追问
感谢你,现在我还有一个问题,如何得到一个矩阵里包括几个数组,比如:[1 4 5 6 10],这个矩阵包括3个数组,即[1] [4 5 6] [10],请问怎样得到有几个数组呢?十分谢谢!
您的回答中numel(arrest)只得到了矩阵中包括了几个连续的数组。
2022-03-06
展开全部
2个while 循环嵌套,A为大型数组时效率将十分低,试试这个算法,只用一个for 循环:
clear
A = [1 2 9 10 11 12 13 17 18 20 21 23 24 25 26 30 33 34 35 36]
1:length(A) % 显示数组下标
i_diffA = diff(A,1) % 对数组A求一阶导
i_BreakIdx = find(i_diffA > 1) + 1 % 跳变点的下标
% 处理第一个跳点
i_arrset(1) = {A(1:i_BreakIdx(1) - 1)};
% 处理中间跳点
for i = 2:length(i_BreakIdx)
i_arrset(end+1) = {A(i_BreakIdx(i-1):i_BreakIdx(i)-1)};
end
% 处理最后一个跳点
i_arrset(end+1) = {A(i_BreakIdx(end):end)};
fprintf('有%d组连续数:\n',numel(i_arrset))
celldisp(i_arrset) % 显示这些连续数
clear
A = [1 2 9 10 11 12 13 17 18 20 21 23 24 25 26 30 33 34 35 36]
1:length(A) % 显示数组下标
i_diffA = diff(A,1) % 对数组A求一阶导
i_BreakIdx = find(i_diffA > 1) + 1 % 跳变点的下标
% 处理第一个跳点
i_arrset(1) = {A(1:i_BreakIdx(1) - 1)};
% 处理中间跳点
for i = 2:length(i_BreakIdx)
i_arrset(end+1) = {A(i_BreakIdx(i-1):i_BreakIdx(i)-1)};
end
% 处理最后一个跳点
i_arrset(end+1) = {A(i_BreakIdx(end):end)};
fprintf('有%d组连续数:\n',numel(i_arrset))
celldisp(i_arrset) % 显示这些连续数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
回答提问者的追问问题,赋图:
clc;clear
A = [1 4 5 6 10];
c1 = 1;
arrset = cell(0,0);
while(c1<=numel(A)) %相比大神的代码,这里做了修改,将<换成<=
c2 = 0;
while (c1+c2+1<=numel(A)&&A(c1)+c2+1==A(c1+c2+1))
c2 = c2+1;
end
%if(c2>=1) %这个判断去掉
arrset= [arrset;(A(c1:1:c1+c2))];
%end
c1 = c1 + c2 +1;
end
fprintf('有%d组连续数:\n',numel(arrset))
celldisp(arrset) % 显示这些连续数
运行结果。
感谢大神的代码,解了我的燃眉之急。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询