2016-11-21 14 views

回答

0

嗯,我想通了!

function last = Chap20Prob11(sum) 
ser = 1; 
asum = 1; 
while(sum >= asum) 
ser = ser + 2; 
asum = asum + ser; 
end 
last = ser 
end 
0

如果你想要的東西更短的更換循環,您可以

  1. 創建1到你的電話號碼N所有的奇數與
>> candidates = 1:2:N 

candidates = 

    1  3  5  7 
  • 使用cumsum獲取數組其中每個元素是所有以前的元素的總和達到所述當前元素
  • >> cumsum(candidates) 
    
    ans = 
    
        1  4  9 16 
    
  • 查找陣列,其是大於Nfind在第一值。這個函數的結果是第一次發生這種情況的索引,即這裏是數組中的第三個位置。
  • >> find(cumsum(candidates) > N, 1) 
    
    ans = 
    
        3 
    
  • 使用索引從之前提取該位置(在此:第三位置)從陣列
  • >> last = candidates(find(cumsum(candidates) > N, 1)) 
    
    last = 
    
        5 
    

    所以,你可以寫你的功能爲

    function last = Chap20Prob11(sum) 
        candidates = 1:2:sum; 
        last = candidates(find(cumsum(candidates) > sum, 1)) 
    end