Informatică, întrebare adresată de rRobert5, 8 ani în urmă

Problema 3807 de pe pbinfo

Cerința
Se dau n numere naturale. Pentru fiecare numar x, calculati 1+(1+2)+(1+2+3)+(1+2+3+4)+...+(1+2+3+...x).

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire
Programul va afișa pe ecran cele n sume calculate.

Restricții și precizări
1 ≤ n ≤ 1.000.000
cele n numere citite vor fi mai mici decât 4.000.000

Exemplu
intrare
5
5 3 2 10 7
iesire
35 10 4 220 84

Răspunsuri la întrebare

Răspuns de lucaciucandrei
5

solutia de 100 de puncte! daca doresti explicatie, scrii in comentarii

#include <iostream>  

using namespace std;

int main() {

   unsigned long long int x, n, k, a, b, c, sem;

   cin >> n;

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

       cin >> x;

       k = x / 2;

       a = k;

       b = k + 1;

       c = 2 * k + 1;

       sem = 0;

       if (a % 3 == 0) {

           a /= 3;

           sem = 1;

       }

       if (b % 3 == 0 && sem == 0) {

           b /= 3;

           sem = 1;

       }

       if (c % 3 == 0 && sem == 0) {

           c /= 3;

           sem = 1;

       }

       cout << 2 * a * b * c + (x * (x + 1) / 2) * (x % 2) << " ";

   }

   return 0;

}


rRobert5: multumesc mult de tot! problema asta chiar mi-a dat batai de cap..
rRobert5: pare ca ai folosit o formula matematica, deci nu am nevoie de explicatie
lucaciucandrei: da! ok!
Alte întrebări interesante