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

#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 <= 10000
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

Răspunsuri la întrebare

Răspuns de Palmabil
2

#include <fstream>

using namespace std;

ifstream fin("pagini.in");

ofstream fout("pagini.out");

int n, i, x, T, impare, xx, cx;

int F[10];

int main()

{

   fin >> T;

   while (T)

   {

       fin >> n;

       for (i = 0; i < 10; i++) F[i] = 0;

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

       {

           fin >> x;

           for (xx = 1; xx <= x; ++xx)

  {

   cx = xx;

   while (cx)

   {

    F[cx % 10]++;

    cx /= 10;

   }

  }

       }

       impare = 0;

       for (i = 0; i < 10; i++)

           if (F[i] % 2)

               impare++;

       if (impare > 1)

           fout << "NU\n";

       else

           fout << "DA\n";

       T--;

   }

   return 0;

}


pmarian98: foarte frumoasa metoda prin care ai abordat-o
Alte întrebări interesante