Rezolvare completă PbInfo #2113 Pagini

Nicoleta este pasionată de cifre. Fiind într-o bibliotecă, s-a întrebat dacă luând n cărţi din bibliotecă, cu cifrele cu care sunt numerotate paginile celor n cărţi, poate forma un număr care citit de la stânga la dreapta este identic cu cel citit de la dreapta la stânga (un palindrom).

Cerința

Cunoscându-se numrul n de cărţi şi numărul p de pagini ale fiecărei cărţi să se determine dacă cu cifrele cu care sunt numerotate paginile cărţilor se poate forma un palindrom.

Date de intrare

Fişierul de intrare pagini.in conţine pe prima linie numărul de teste T. Fiecare dintre următoarele T linii conţin câte n+1 numere naturale; primul dintre acestea reprezintă numărul de cărţi n, următoarele n valori reprezintă numărul p de pagini pentru fiecare carte dintre cele n.

Date de ieșire

Fişierul de ieşire pagini.out conţine T linii. Pe fiecare linie se va afla mesajul DA dacă cu cifrele cu care sunt numerotate paginile cărţilor de pe linia respectivă din fişierul de intrare se poate forma un palindrom sau mesajul NU în caz contrar.

Restricții și precizări

  • 1 <= T <= 3
  • 1 ≤ n ≤ 10.000
  • 10 ≤ p ≤ 1000
  • Mesajele DA/NU sunt scrise cu majuscule
  • Numerotarea paginilor începe pentru fiecare carte de la 1

Exemplul 1:

pagini.in

3
1 19
2 19 19
1 18

pagini.out

DA
DA
NU

Exemplul 2:

pagini.in

1
6 11 73 243 53 33 604

pagini.out

NU

Exemplul 3:

pagini.in

2
5 199 929 325 299 325
6 11 73 243 53 33 604

pagini.out

NU
NU

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 Pagini:

// prof. Lucian Neagu
#include <fstream>

using namespace std;

ifstream fin("pagini.in");
ofstream fout("pagini.out");

int T, t, n, p, frecv[10], i, j, f, nr, impare, x;

int main()
{
    // citesc numarul de teste
    fin >> T;

    // pentru fiecare test T, aplic algoritmul de numarare al cifrelor
    for(t=1; t<=T; t++)
    {
        // citesc numarul de carti
        fin >> n;

        // pentru fiecare caz, numerotarea cifrelor incepe de la 0.
        for(f=0; f<=9; f++)
            frecv[f] = 0;

        // parcurg fiecare carte in parte si ii numar aparitiile fiecarei cifre
        for(j=1; j<=n; j++)
        {
            // citirea numarului de pagini, pentru fiecare carte j
            fin >> p;

            // numar aparitiile fiecarei cifre, corespunzatoare cartii j
            for(nr=1; nr<=p; nr++)
            {
                x=nr;
                while (x)
                {
                    frecv[x%10]++;
                    x/=10;
                }
            }
        }

        impare = 0;

        for(i=0; i<=9; i++)
            if (frecv[i]%2)
                impare++;

        if (impare==0 || impare==1)
            fout << "DA\n";
        else
            fout << "NU\n";
    }

    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 #2113 Pagini

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2113 Pagini 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!