Rezolvare completă PbInfo #2448 patrate3

Un elev a desenat un set format din mai multe pătrate care conțin numere naturale nenule, distincte, consecutive, dispuse în număr egal pe laturi. Pe latura fiecărui pătrat sunt scrise un număr impar de valori. În fiecare pătrat, numerele sunt scrise în ordine crescătoare parcurgând laturile sale, începând din colțul stânga-jos, în sensul invers al acelor de ceasornic. Elevul a numerotat pătratele cu 1, 2, 3 etc., în ordinea strict crescătoare a numărului de valori conținute de fiecare. Diferența dintre cel mai mic număr din pătratul P (1 < P) și cel mai mare număr din pătratul P - 1 este egală cu 1. Primele patru pătrate sunt:

Astfel, primul pătrat conține numerele naturale distincte consecutive de la 1 la 8, dispuse câte trei pe fiecare latură a pătratului. Al doilea pătrat conține următoarele 16 numere naturale distincte consecutive, dispuse câte cinci pe fiecare latură. Al treilea pătrat conține următoarele 24 de numere naturale distincte consecutive, dispuse câte șapte pe fiecare latură. Al patrulea pătrat conține următoarele 32 de numere naturale distincte consecutive, dispuse câte nouă pe fiecare latură etc.

Cerința

Scrieţi un program care rezolvă următoarele două cerinţe:
1. citește un număr natural M și determină numărul K de valori conținute de pătratul numerotat cu M;
2. citește un număr natural N și determină numărul T al pătratului care conține numărul N pe una dintre laturi.

Date de intrare

Fișierul de intrare patrate3.in conține pe prima linie un număr natural C reprezentând cerința din problemă care trebuie rezolvată (1 sau 2). Dacă C = 1, atunci fişierul conține pe a doua linie numărul natural M. Dacă C = 2, atunci fișierul conține pe a doua linie numărul natural N.

Date de ieșire

Dacă C = 1, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul K, reprezentând răspunsul la cerința 1 a problemei. Dacă C = 2, atunci fişierul de ieşire patrate3.out conţine pe prima linie numărul natural T, reprezentând răspunsul la cerinţa 2.

Restricții și precizări

  • 1 ≤ M ≤ 260 000 000
  • 7 ≤ N ≤ 2 147 302 920
  • Numerele N, M, T și K sunt numere naturale
  • NU există două pătrate cu acelaşi număr de valori scrise pe laturi
  • Pentru rezolvarea corectă a cerinţei 1 se acordă 10 puncte; pentru rezolvarea corectă a cerinței 2 se acordă 80 de puncte.
  • În concurs s-au acordat 10 puncte din oficiu. Aici se acordă 10 puncte pentru exemplele din enunț.

Exemplul 1:

patrate3.in

1
3

patrate3.out

24

Explicație

Cerinţa este 1. Pătratul numerotat cu M = 3 conține K = 24 de numere naturale (vezi figura din enunț).

Exemplul 2:

patrate3.in

2
73

patrate3.out

4

Explicație

Cerinţa este 2. Numărul N = 73 este conținut de pătratul numerotat cu T = 4 (vezi figura din enunț).

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema patrate3:

#include <fstream>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");

int main()
{
    int N,C,M,T,K,nr=0;
    f>>C;
    if(C==1)
    {
        f>>M;
        K=8*M;
        g<<K<<endl;
    }
    else
    {
        f>>N;
        T=0;nr=0;
        while(8*(T+1)<=N-nr)
            {
                ++T; K=8*T; nr=nr+K;
            }
        if(N>nr)
        {
            ++T;
        }
        g<<T<<endl;
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2448 patrate3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2448 patrate3 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!