Cerința
Se dă n
un număr natural. Cifrele lui n
se permută pentru a forma un număr natural, de aceeași lungime cu n
, și care să fie palindrom. Aflați câte asemenea numere se pot obține.
Date de intrare
Programul citește de la tastatură numărul n
.
Date de ieșire
Programul va afișa pe ecran numărul de palindromuri care se pot obține prin permutarea cifrelor lui n
.
Restricții și precizări
0 ≤ n ≤ 10
38
- PCR este prescurtarea de la Permutări Cu Repetiţie
Exemplu
Intrare
1102022
Ieșire
4
Explicație
Permutând cifrele lui 1102022
se pot obține următoarele palindromuri de aceeași lungime cu 1102022
: 1022201
, 1202021
, 2012102
, 2102012
.
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 PCR:
#include <iostream>
#include <cstring>
using namespace std;
int i, n, imp;
long long f[20], sol, sol0, v[10];
char s[50];
int main()
{
// calcul factoriale
f[0] = 1;
for(i = 1; i <= 19; i++)
f[i] = f[i-1] * i;
cin >> s;
n = strlen(s);
// calcul frecventa cifre
for(i = 0; i < n; i++)
v[s[i]-'0']++;
// verificare cifre cu numar impar de aparitii
imp = 0;
for(i = 0; i <= 9; i++)
if(v[i] % 2 == 1) imp++;
sol = 0;
if(imp < 2)
{
// calcul total palindroame
sol = f[n/2];
for(i = 0; i <= 9; i++)
if(v[i] > 0) sol = sol / f[v[i]/2];
//calcul nr palindroame ce incep cu 0
if(v[0] >= 2)
{
v[0] = v[0] - 2;
sol0 = f[n/2-1];
for(i = 0; i <= 9; i++)
if(v[i] > 0) sol0 = sol0 / f[v[i]/2];
sol = sol - sol0;
}
}
cout << sol;
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 .
Rezolvarea problemei #3025 PCR
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3025 PCR 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!