Untitled

mail@pastecode.io avatar
unknown
plain_text
3 years ago
2.9 kB
0
Indexable
Never
#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;

    }


}