Răspuns :
Răspuns:
#include <algorithm>
#include <fstream>
#include <iostream>
using std::cout, std::cin, std::endl, std::ifstream, std::sort;
/* Returnează numărul de cifre al unui număr */
static int lungimeNumar(int numar) {
int contorCifre{};
while (numar) {
++contorCifre;
numar /= 10;
}
return contorCifre;
}
/* returnează ultima cifră pară a nr. sau -1 dacă nu are cifre pare */
static int cifra(int numar) {
int ultimaCifra{-1};
while (numar) {
ultimaCifra = numar % 10;
if (ultimaCifra % 2 == 0) return ultimaCifra;
numar /= 10;
}
return ultimaCifra;
}
static void celMaiMareNumar(int *vectorNumere, const size_t &lungimeVector) {
// dacă am găsit cel puțin o cifră pară setăm la true
bool gasitCifraPara{false};
int ultimaCifraPara;
// parcurgem vectorul (în care avem salvat numerele din fișier)
for (size_t i = 0; i < lungimeVector; ++i) {
ultimaCifraPara = cifra(vectorNumere[i]); // salvăm ultima cifră pară a nr.
// dacă cifra găsită e pară și găsitCifrăPară e diferit de true setăm
// gasitCifraPară la true
if (ultimaCifraPara != -1 && gasitCifraPara != true) gasitCifraPara = true;
vectorNumere[i] = ultimaCifraPara; // și în locul numărului salvăm cifra
}
// sortăm vectorul descrescător ( ceea ce ne și creează cel mai mare număr format din cifrele pare )
sort(vectorNumere, vectorNumere + lungimeVector,
[](int &primulNumar, int &alDoileaNumar) {
return primulNumar > alDoileaNumar;
});
// dacă s-a găsit cel puțin o cifră pară ( că altfel în vector am avea doar -1 )
if (gasitCifraPara == true)
// printăm toate cifrele pare (cele impare vor fi -1 pe care nu le afișăm)
for (size_t i = 0; i < lungimeVector; i++) {
if (vectorNumere[i] != -1) cout << vectorNumere[i];
}
// dacă nu există cifre pare în vector afișăm NU EXISTĂ
else
cout << "NU EXISTA" << endl;
}
int main() {
size_t n; // n va conține câte numere citim din fișier
ifstream fin("bac.in"); // deschidem fișierul
// dacă fișierul nu s-a deschis cu succes închidem programul
if (!fin.good()) exit(EXIT_FAILURE);
fin >> n; // citim n
if (n > 15000) exit(EXIT_FAILURE); // dacă nr. de pe prima linie > 15000
int *vectorCifre = new int[n]; // creăm un vector de n numere
// citim n numere de pe a doua linie
for (size_t i = 0; i < n; i++) {
fin >> vectorCifre[i];
if (lungimeNumar(vectorCifre[i]) > 4)
exit(EXIT_FAILURE); // dacă numărul are mai mult de 4 cifre ieșim din program
}
fin.close(); // închidem fișierul
/*
funcția returnează cel mai mare număr format din ultimele cifre pare ale numerelor citite de pe a doua linie
*/
celMaiMareNumar(vectorCifre, n);
delete[] vectorCifre; // ștergem vectorul alocat
return 0;
}
Așa aș face-o eu, nu o fi cea mai rapidă rezolvare dar 100% funcționează cum trebuie )).