Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оцените решение задачки, пжл (https://javascript.ru/forum/misc/74647-ocenite-reshenie-zadachki-pzhl.html)

Alexandroppolus 26.07.2018 19:42

рони,
т.е. дан массив, индексы начала и конца, шаг, и надо найти сумму элементов, без цикла, рекурсии, всяких трюков с setInterval и т.д.? Синхронным кодом? Методы массивов использовать можно?

рони 26.07.2018 19:42

:) смотрите пост №28 Nexus,
уберите циклы и верните сумму

рони 26.07.2018 19:45

Цитата:

Сообщение от Alexandroppolus
Методы массивов использовать можно?

если это не цикл типа reduce и прочих, не знаю что может пригодится из этих методов.

Alexandroppolus 26.07.2018 19:47

а, теперь понял.
Тут всё в кучу, в этом топике )
сумма арифметической прогрессии, в общем. По формуле все вычисляется

рони 26.07.2018 19:48

Цитата:

Сообщение от Alexandroppolus
т.е. дан массив,

нет , только начало, предел и шаг

рони 26.07.2018 19:48

Цитата:

Сообщение от Alexandroppolus
По формуле все вычисляется

:yes: :dance:

MC-XOBAHCK 26.07.2018 20:00

Цитата:

Сообщение от рони (Сообщение 491141)
:yes: :dance:

end * (end + 1) * 0.5
только с шагом это не прокатит.

рони 26.07.2018 20:24

сумма арифметической прогрессии
 
MC-XOBAHCK,
function fun(start, end, step) {
    step = step || (start > end ? -1 : 1);
    var n = (end - start) / step | 0;
    return (start + n * step / 2) * ++n
}
alert(fun(10, 1, -1));
alert(fun(1, 10, 1));
alert(fun(10, 1));
alert(fun(1, 10));

https://javascript.ru/forum/misc/731...-shagom-2.html

MC-XOBAHCK 26.07.2018 21:02

рони,
не, так бы я точно не смог.

Я начал просто вот так в столбик расписывать и приводить к формуле:
n +
(n + 1) +
(n + 2) +
(n + 3) +
(n + 4) +
(n + 5)
=
n + n * (1 + 2 + 3 + 4 + 5 + ........);

получается в скобках выражение заходит под формулу: end * (end + 1) * 0.5, но в ней end = end - start

start + start * ((end - start) * (end - start + 1) * 0.5)

Это получилась формула для последовательных чисел, если не наделал ошибок.
А как к ней шаг прикрутить я завис без каких либо идей.

+++++++++++++
Запустил на тест и сразу вижу 2 ошибки когда n выносил как множитель в прорисовке макета формулы.
n * (1 + 2 + 3 + 4 + 5 + 6 + ........);

MC-XOBAHCK 26.07.2018 21:25

Ошибки разобрал. Вот такая получается функция суммы последовательных чисел если делать через арифметическую формулу:
function sum(start, end) {
    return start * ((end - start + 1) * (end - start + 2) * 0.5);
}
console.log(sum (1, 4));  // 10

!!! Функция работает НЕПРАВИЛЬНО!!! Где то ошибка в формуле, не могу понять.
console.log(sum(2, 5));


Часовой пояс GMT +3, время: 16:14.