所以伙计们,我有一个问题,我要开发一个算法,它需要一个有限的实数列表,这些实数按递增顺序排序,一个实数N,和
如果存在两个索引ij,即1 <= i <j <= numel(L)L(i)+L(j)=N,则算法返回对sumToN = [L(i) L(j)];在多个索引对存在所需属性的情况下,函数返回一个有效的对,
-如果任何指数L(i)+L(j)=Ni都不满足等式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]。

10-08 08:43
查看更多