Algorithm Matlab算法问题
伙计们,我在开发一个算法时遇到了一个问题,这个算法需要一个按递增顺序排序的实数的有限列表和一个实数N,然后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
-如果存在两个索引
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