Накопительная сумма в одной строке в C # - PullRequest
7 голосов
/ 13 апреля 2011

Можно ли сделать это в одну строку с целью получения накопленной суммы, равной n?

int n = 0;
for (int i = 1; i <= 10; i++)
{
    n += i;
}

Ответы [ 5 ]

14 голосов
/ 13 апреля 2011

Для этого есть метод расширения LINQ:

static int SlowSum1ToN(int N)
{
    return Enumerable.Range(1, N).Sum();
}

Однако вы также можете рассчитать это конкретное значение (сумму арифметической последовательности) без повторения вообще :

static int FastSum1ToN(int N)
{
    return (N * (1 + N)) / 2;
}
5 голосов
/ 13 апреля 2011

Да

Вы можете заменить

int S = 0

for (int i = 0; i <= N; i++)
{
    S += i;
}

на

int S = (N*(N+1))/2

5 голосов
/ 13 апреля 2011

Да, это возможно, вы можете сделать это, используя Enumerable.Range , чтобы сгенерировать последовательность целых чисел, а затем вызвать метод расширения LINQ Sum следующим образом:

int result = Enumerable.Range(1, 10).Sum();
1 голос
/ 13 апреля 2011

Как дополнительный ответ, есть также функция Aggregate, которая является более общей, чем Sum:

var sum = Enumerable.Range(1, 10).Aggregate(0, (a, b) => a += b);

Так что вы также можете делать такие вещи, как

// multiply 1 * 2 * 3 * 4 ...
var product = Enumerable.Range(1, 10).Aggregate(1, (a, b) => a *= b);
0 голосов
/ 13 апреля 2011

Чем увлекаются одни вкладыши? Вот оно:

int n = 0; for (int i = 1; i <= 10; i++) {n += i;}

Есть ли лучший способ рассчитать это? Конечно. Посмотрите другие ответы, которые используют формулу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...