fbpx

Problema #3332 – PatratMagic4 – Rezolvari PBInfo

de Mihai-Alexandru

Un Pătrat Magic este un pătrat ce conține numerele de la 1 la n 2 în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și constanta pătratului magic.

Cerința

Să se scrie in limbajul c++ o funcție numita magic care are ca argument un număr natural c ți care să se verifice dacă există un pătrat magic cu constanta c.

Subprogramul va returna latura pătratului, adică n, sau 0 dacă nu există pătrat magic cu constanta c.

Restricții și precizări

  • 1 ≤ c < 18.446.744.073.709.551.616

Exemplu

magic(34) = 4, magic(88) = 0.

int magic(unsigned long long val)
{
    unsigned long long dr = 1000000 , st = 0, m , n = 0;
    if(val < 15) n = 0;
    else
    {
        while(st <= dr && n == 0)
        {
            m = (st + dr) / 2;
            if((m * m * m + m) / 2 == val) n = m;
            else if((m * m * m + m) / 2 < val) st = m + 1;
            else dr = m - 1;
        }
    }
    return n;
}
Comentarii

S-ar putea sa iti placa