所以伙计们,我有一个问题,我要开发一个算法,它需要一个有限的实数列表,这些实数按递增顺序排序,一个实数N,和
如果存在两个索引i
和j
,即1 <= i <j <= numel(L)
和L(i)+L(j)=N
,则算法返回对sumToN = [L(i) L(j)]
;在多个索引对存在所需属性的情况下,函数返回一个有效的对,
-如果任何指数L(i)+L(j)=N
和i
都不满足等式j
,则函数返回空对1 <= i < j <= numel(L)
。
L = [1 2 2 3];
N = 3;
sumToN = 0;
for i=1:numel(L);
for j=1:numel(L);
if i<j;
if L(i) + L(j) == N;
sumToN = [L(i) L(j)];
display(sumToN);
else
Ret = [0 0];
display(Ret);
end
end
end
end
现在,在我用matlab r2014编写的这段代码中,独立于if条件,我得到了一个奇怪的输出:命令窗口显示向量
Ret
的两倍和向量sumToN
的四倍。关于如何解决这个问题有什么建议吗?我认为算法是正确的… 最佳答案
算法正确,显示行为也正确。在您的循环中i<j
满足6次即(i,j)对(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)因此,根据您的代码,您应该期望显示6次。根据L中的数据,条件L(i)+L(j)==3
可以满足(1,2)和(1,3)的两倍所以你会显示两次sumToN,剩下的4次Ret。
如果希望在找到一对时立即停止,则应在检测到L(i)+L(j) == N
时立即从该函数返回值您应该在循环开始之前将ret初始化为[0 0],并在循环结束后返回。如果找不到l(i)+l(j)==n,则返回[0]。