簡體   English   中英

數組,整數和數組總和

[英]array, integers and sum of array

問題:編寫一個方法,該方法將兩個整數n和m作為參數,並將所有數字(數字數組)的總和從n(包括n)返回到m(包括m)。

public int getSum(int n, int m){
    this.n = n;
    this.m = m;
    int [] x = {n,m};
    int result = 0;
    for(int i=0; i<x.length; i++){
        result += x[i];
    }
    return result;
}

如果n = 1並且m = 4,則該方法返回5,但是該方法需要返回10,(1,2,3,4)=(1 + 2 + 3 + 4)。 猜猜這行不正確int [] x = {n,m}; 因為如果n = 1且m = 4,則數組將為{1,4}。 如何解決此問題,如果n = 1和m = 4,則需要創建數組{1,2,3,4}

嘗試這個:

public int getSum(int n, int m){
    int result = 0;
    for(int i = n;i <= m;i++)
         result += i;
    return result;
}

或這個:

public int getSum(int n, int m){
    int result = 0;
    while(n <= m)
         result += n++;

    return result;
}

或有趣的數學:

public int getSum(int n, int m){
    return (m*(m+1)/2) - ((n-1)*((n-1)+1)/2)
}

F(n) = (n*(n+1)/2) = 0+1+2+...+n
F(m) - F(n-1) = n + n+1 + n+2 + ... + m

Java 8

return IntStream.rangeClosed(n, m).sum();

@Andres已經給出了完美的解決方案。 但是我想解釋更多,所以繼續。

您的代碼有很多問題。

但是,是的,核心問題是線路。 int [] x = {n,m};

該行所做的是創建僅包含2個數字的數組,並且在該數組上進行迭代時,您僅添加了這兩個數字,而不是兩者之間的所有數字。

在C,C ++,Java等語言中,迭代一系列數字的最簡單的習慣用法是

for(int i = n, i <=m, i++){
  ...
}

這是創建一個臨時變量i並將其初始化為n范圍內的第一個數字。 然后循環運行,使該臨時編號i每次遞增1,直到超過范圍m的最后一個編號。

在循環體內,對於循環的該迭代,范圍的每個數字現在都可用。

因此,在對所有數字求和的情況下,可以通過設置如下所示的累加器變量來累加范圍內的所有這些數字。

int acc = 0;
for(int i = n, i <=m, i++){
  acc = acc + i;
}

你不能只是這樣做:

public static int getSum(final int n, final int m) {
    // default value
    int sum = 0;

    // not permitted
    if (n >= m)
        return 0;

    // all of the work here
    for (int i = n; i <= m; i++)
        sum += i;

    return sum;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM