Algorithm Matlab算法问题

Algorithm Matlab算法问题,algorithm,matlab,Algorithm,Matlab,伙计们,我在开发一个算法时遇到了一个问题,这个算法需要一个按递增顺序排序的实数的有限列表和一个实数N,然后 -如果存在两个索引i和j,使得1算法正确,显示行为也正确。在你的循环中i好了,伙计们,我用这种方式解决了这个问题: L = [1 2 2 3]; N = 3; sumToN = 0; Ret = [0 0]; for i=1:numel(L); for j=1:numel(L); if i<j && L(i) + L(j) == N; sumT

伙计们,我在开发一个算法时遇到了一个问题,这个算法需要一个按递增顺序排序的实数的有限列表和一个实数N,然后


-如果存在两个索引
i
j
,使得
1算法正确,显示行为也正确。在你的循环中
i好了,伙计们,我用这种方式解决了这个问题:

L = [1 2 2 3];
N = 3;
sumToN = 0;
Ret = [0 0];

for i=1:numel(L);
  for j=1:numel(L);
    if i<j && L(i) + L(j) == N;
     sumToN = [L(i) L(j)];
    end
  end
end
if sum(sumToN) == N;
     display(sumToN);

else
     display(Ret);
end
L=[1 2 3];
N=3;
萨姆顿=0;
Ret=[0];
对于i=1:numel(L);
对于j=1:numel(L);

如果我让我们稍微解构一下你的程序。我要做的第一件事是将循环变量从
I,j
更改为
a,b
,因为:

接下来我来看看这条线

if i<j;
请注意,
b
的循环现在从值
a+1
开始。所以
b
总是大于
a
,我们不再需要这个检查。我还在
numel(L)-1处结束了
a
循环,因为
L(numel(L))
之后没有
b
要占用的元素,我们希望确保
a+1
始终有效。
(还要注意,我已经删除了行末尾的分号。它们是不必要的,并且有效地在循环中添加了一个空行。)

现在,我们准备好查看
L(a),L(b)
对是否会添加到
N
中,如果是,请设置返回值:

if L(a)+L(b) == N
   sumToN = [L(a) L(b)];   
如果要在此处显示值,请执行以下操作之一:

   display(sumToN);
或者将分号从赋值中去掉
sumToN=…

如果我们在
If
中,并且我们已经分配了返回值,那么我们希望停止寻找其他答案。在这一点上,我将假设您应该编写一个独立的函数,而这就是函数应该做的全部工作。要结束循环(以及函数的任何进一步处理),可以在赋值后立即使用
return
。这使嵌套循环看起来像这样:

sumToN = [0 0];
for a=1:numel(L)-1
   for b=a:numel(L)
      if L(a)+L(b) == N
         sumToN = [L(a) L(b)];
         return
      end
   end
end
从这里,您可以在开头添加
L
N
的初始化,以及
disp(sumToN)位于脚本的末尾,或者您可以使用函数声明和另一个
end
创建一个完整的函数:

function sumToEnd = summy(L,N)
   <all the stuff above goes here>
end
函数sumToEnd=summy(L,N) 结束

如果这是一个更大的脚本的一部分,您不想在找到一对后就完全退出,那么事情就有点复杂了,但这仍然是很有可能的。(您必须使用
break
两次,每次都从一个循环中退出,并与一个布尔变量配对以告诉您何时中断。)

因此似乎不支持LateX标记。您可以编辑您的问题以使其更具可读性吗?谢谢我怎么做?我需要显示更少或相等的符号!老派的
如何在找到一对后立即停止循环?如果它是一个函数,您可以直接从中返回。如果不是,你需要设置一些标志变量并从循环中中断。如果条件“L(a)+L(b)==N”不满足,上面的算法似乎不会返回空对…@ale42它对我来说是这样的<代码>萨姆顿=[0]
表示如果没有任何内容覆盖它,将返回
[0]
。你试过运行它吗?是的。现在它工作了,代码是ligher。我在“for”循环中的“return”之前添加了“display(sumToN)”,就在“return”之前,在程序的末尾,在循环之外。谢谢
sumToN = [0 0];
for a=1:numel(L)-1
   for b=a:numel(L)
      if L(a)+L(b) == N
         sumToN = [L(a) L(b)];
         return
      end
   end
end
function sumToEnd = summy(L,N)
   <all the stuff above goes here>
end