我正在努力将这个问题写入Matlab Code。我知道我应该使用' for'循环,但我不知道如何使用它来做到这一点。 对于n≥1,考虑以下行向量序列v(n):
v(1) = (1)
v(2) = (1, 1)
v(3) = (2, 1)
v(4) = (1, 2, 1, 1)
v(5) = (1, 1, 1, 2, 2, 1)
v(6) = (3, 1, 2, 2, 1, 1)
通过读出上面行的内容给出每一行,例如v(6)包含“三个,两个二,一个”,这给出了v6。编写脚本以打印v(n),n = 1,最多n = 12。
答案 0 :(得分:1)
一个可能的版本:
N = 6;
v = cell(N,1);
v{1} = 1;
for ii = 2:N
v1 = v{ii-1};
stop_point = find(diff(v1));
if isempty(stop_point)
n = length(v1);
m = v1(1);
v{ii} = [n,m];
else
n = diff([0,stop_point,length(v1)]);
m = v1([stop_point,end]);
v2 = [n;m];
v{ii} = v2(:).';
end
end
示例输出:
>> v{:}
ans =
1
ans =
1 1
ans =
2 1
ans =
1 2 1 1
ans =
1 1 1 2 2 1
ans =
3 1 2 2 1 1
>>
注意:不等长度的行向量不能包含在矩阵中。存储它们的简单方法是使用单元阵列。