Задача
Найти сумму целых чисел на промежутке от $a$ до $b$.
Входные данные
Два целых числа $a$ и $b$, по модулю не превышающих $10^9$.
Выходные данные
Сумма целых чисел на промежутке от $a$ до $b$.
Тесты
Входные данные | Выходные данные |
2 5 | 14 |
249 318 | 19845 |
23 69 | 2162 |
124 200 | 12474 |
478 653 | 99528 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> using namespace std; int main() { long a, b, n, S; cin >> a >> b; n = b - a + 1; S = (a + b) * n / 2; cout << S; return 0; } |
Решение
Для того, что бы найти ответ, нам необходимо знание формул прогрессии, так как решением данной задачи является сумма $n$ первых членов арифметической прогрессии. Вычислить её можно по формуле $\displaystyle S_n = \frac{a_1 + a_n}{2} \cdot n$, где $a_1$ — это a из входного потока, а $a_n$ — это b. Тем не менее, мы все ещё не можем применить вышеприведенную формулу, так как нам неизвестно $n$. Выведем же его из формулы $n$-ого члена арифметической прогрессии: $a_n = a_1 + d \cdot (n-1)$, где $d$ — это разность арифметической прогрессии, которая по условию (хоть и негласно) равна единице. Зная это, из последней формулы выведем, что $n = a_n-a_1 + 1$. Теперь же, когда мы знаем все необходимые значения, остается только подсчитать сумму арифметической прогрессии по ранее данной формуле и подать результат на выход.
Ссылки
Условие задачи на e-olymp
Код решения на Ideone
Засчитываю. Такое авторское объяснение наверное тоже имеет право на публикацию. Хотя не понимаю, почему то, что разность двух соседних чисел равна единице является «негласным» правилом. И не очень понимаю зачем так сложно считать количество целых чисел в заданном промежутке. Пусть остаётся как есть. Авторский подход наверняка найдёт своего читателя.
Да! Только ставьте пробелы между операциями в коде. Будет легче читаться.