Untitled
unknown
plain_text
4 years ago
2.9 kB
5
Indexable
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("date.txt");
int main() {
int fr[9] = {}, CP = -1, nrIMP;
int n, x;
f >> n;
while (f >> x) {
fr[x]++;
if(x % 2 == 0 && x > CP && fr[x] % 2 == 0)
CP = x;
//CP = cea mai mare cifra para citita
}
if (CP == -1) { //Daca nu exista cifre pare...
cout << -1;
return 0;
}
if (n % 2 == 0) { //Caz 1 - numar par de cifre
for (int i = 0; i <= 9; i++) { //verificam daca sirul poate fi palindrom
if (fr[i] % 2 == 1) {
cout << -1;
return 0;
} }
for(int i = 0; i < fr[CP] / 2; i++) { // prima(primele) cifra(cifre) din palindrom va(vor) fi cea mai
cout << CP; } // mare cifra para
for(int i = 9; i >= 0; i--){ // construim prima jumatate a palindromului
if(i != CP) // cifrele din interiorul palindromului trebuie sa fie diferite
// de CP
for(int j = 0; j < fr[i] / 2; j++)
cout << i;
}
for(int i = 0; i <= 9; i++){ //Construim a doua jumatate a palindromului
if(i != CP)
for(int j = 0; j < fr[i] / 2; j++)
cout << i;
}
for(int i = 0; i < fr[CP] / 2; i++) { // ultima(ultimele) cifra(cifre) din palindrom
cout << CP; } // va(vor) fi CP
return 0;
}
if (n % 2 == 1) { //Caz 2 - numar impar de cifre
int ok = 2;
for (int i = 0; i <= 9; i++) {
if (fr[i] % 2 == 1) {
nrIMP = i; // Cifra din mijlocul palindromului
ok--;
}
if (ok < 1) { //Daca avem mai mult de 2 cifre cu frecventa impara..
cout << -1;
return 0;
} }
for(int i = 0; i < fr[CP] / 2; i++) { //...
cout << CP; }
for(int i = 9; i >= 0; i--){ //...
if(i != CP)
for(int j = 0; j < fr[i] / 2; j++)
cout << i;
}
cout << nrIMP; //Adaugam cifra din mijloc
for(int i = 0; i <= 9; i++){ //...
if(i != CP)
for(int j = 0; j < fr[i] / 2; j++)
cout << i;
}
for(int i = 0; i < fr[CP] / 2; i++) { //...
cout << CP; }
return 0;
}
}
Editor is loading...