2016-09-19 97 views
-1

所以我必须写程序,解决了这些规则:为什么Matlab忽略我的语句?

找到一个六位数字,其中第一个数字比第三多一个,第二个数字比第四少一个,第五位是一个不到第三位,第六位比第四位多一位。第二个和第三个数字的总和等于第一个数字。所有数字的总和是三十。

我只允许使用嵌套forif陈述,这就是我想出了:

for I = inf 
    for n4 = (1:9) 
     n6 = n4 + 1; 
     n2 = n4 -1; 
     for n3 = (1:9) 
      n1 = n3 + 1; 
      n5 = n3 - 1; 
      if (n1 - n2 == n3) 
       if (n1 + n2 + n3 + n4 + n5 + n6 == 30) 
        break 
       end 
      end 
     end 
    end 
end 

我遇到的问题是,Matlab的忽略了我所有的if语句,因为在的结束程序,n1 - n2 = 0,n3 = 9,以及总和n1+n2+...+n6 = 22而不是30。这是我在Matlab中的第一个项目,所以我希望我给了这个问题足够的信息, 谢谢!

+3

一次调用'break'只会跳出最内层的for循环。您需要稍后保存这些变量以保持安全。否则外循环继续进行,覆盖你的数字。另外,'for I = inf'可能不会做你认为的事情。 –

+0

我不明白你的问题。当我运行你的代码时,它就像一个魅力,我得到一个答案,说n1 = 9,n2 = 1,n3 = 8,n4 = 2,n5 = 7,n6 = 3。 –

+0

@NickyMattsson如果您完全按照书面方式运行代码,那么您无法获得该结果。 – excaza

回答

1

代码完美地工作,并给出正确的结果,唯一的问题: 已经告诉break中断只有1内循环。

如果这是您的程序的整个代码,您可以使用return而不是break。另一种方式: 使用一些逻辑索引。 例如:

flag = 0; 

for I = inf 
    for n4 = (1:9) 
     n6 = n4 + 1; 
     n2 = n4 -1; 
     for n3 = (1:9) 
      n1 = n3 + 1; 
      n5 = n3 - 1; 
      if (n1 - n2 == n3) 
       if (n1 + n2 + n3 + n4 + n5 + n6 == 30) 
        flag = 1; 
        break 
       end 
      end 
     end 
    if flag==1 
     break 
    end 
    end 
end 

顺便说。答案是918273