2016-09-19 124 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