Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.
Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.
Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.
Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.
Meniu shortcuturi | ? |
Căutare probleme sau utilizatori | / |
Navigare printre rezultatele căutării | ↑, ↓ |
Meniu de contact și feedback | CTRL + Shift + F |
Ieșire din meniuri | Esc |
Setări editor | CTRL + Shift + S |
Schimbare stil editor | CTRL + Shift + E |
Șabloane de cod | CTRL + Shift + 1/2/3 |
Golire editor | CTRL + Shift + 4 |
Dându-se două numere naturale, x
și y
, să se determine suma x + (x + 1) + (x + 2) + … + (y - 1) + y
(suma numerelor naturale din intervalul [x; y]
).
Exemplu. Pentru x = 3
și y = 5
, avem suma 3 + 4 + 5 = 12
.
Observăm următorul lucru: suma căutată de noi, x + (x + 1) + (x + 2) + … + (y - 1) + y
este egală cu suma 1 + 2 + 3 + … + (x - 1) + x + (x + 1) + … + (y - 1) + y
(suma numerelor de la 1
la y
), de unde scădem suma 1 + 2 + 3 + … + (x - 1)
(suma numerelor de la 1
la x - 1
).
Din fericire, avem formula sumei Gauss, care ne determină suma numerelor de la 1
la n
, cu formula n * (n + 1) / 2
:
Așadar, suma pe care o căutăm noi se poate rescrie ca și:
Prin urmare, trebuie doar să calculăm cele două sume Gauss (de la 1
la y
și de la 1
la x - 1
), după care să o scădem pe a doua din prima.
Codul arată cam așa:
#include <iostream>
using namespace std;
int main()
{
//Declarăm și citim capetele intervalului dat
int x, y;
cin >> x >> y;
//Calculăm și afișăm suma numerelor naturale din intervalul [x; y]
int sumaNr = y * (y + 1) / 2 - (x - 1) * x / 2;
cout << sumaNr;
return 0;
}