Cerinţa
Se dă un șir cu n numere naturale. Determinați suma celor care au oglinditul număr prim.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale.
Date de ieşire
Programul afișează pe ecran numărul S, reprezentând rezultatul cerut.
Restricţii şi precizări
1 ≤ n ≤ 1000 cele n numere citite vor fi mai mici decât 1.000.000.000
Exemplu Intrare
6 133 35 41 31 90 7
Ieșire 206
Explicație
Dintre cele 6 numere citite au oglinditul număr prim: 133 35 31 7. Suma lor este 206.
Daca poate cineva va rog mult cu structura cât timp, DAU COROANĂ
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using std::cout, std::cin, std::endl;
// Funcția returnează oglinditul numărului
static int creeazaOglindit(int numar) {
int oglinditulNumarului{}, ultimaCifra;
// cât timp numărul este diferit de 0
while (numar) {
// luăm ultima cifră a numărului
ultimaCifra = numar % 10;
// și o adăugăm la oglindit
oglinditulNumarului = oglinditulNumarului * 10 + ultimaCifra;
numar /= 10; // împărțim numărul la 10 ca while-ul să nu ruleze la infinit
}
return oglinditulNumarului; // la final returnăm oglinditul creat
}
// Funcția returnează true dacă numărul este prim, false altfel
static bool estePrim(const int& numar) {
// 0 și 1 nu sunt prime
if (numar == 0 || numar == 1) return false;
// dacă numărul se împarte la altceva înafară de 1 și el însuși înseamnă că nu e prim
for (int i = 2; i <= numar / 2; ++i)
if (numar % i == 0) return false;
// altfel înseamnă că e prim
return true;
}
int main() {
int n, *numere, sumaNrPrime{}, nrOglindit;
cout << "Introdu n (de ex. 5) >> ";
cin >> n;
// Creăm vectorul de dimensiune N
numere = new int[static_cast<size_t>(n)];
// Citim numerele-n vector
for (int i = 0; i < n; i++) {
cout << "numere[" << i << "] >> ";
cin >> numere[i];
}
// Parcurgem vectorul și dacă oglinditul numărului este prim adăugăm numărul la sumă
for (int i = 0; i < n; ++i) {
nrOglindit = creeazaOglindit(numere[i]);
if (estePrim(nrOglindit)) sumaNrPrime += numere[i];
}
// Afișăm suma numerelor ce au oglinditul prim
cout << "Suma numerelor prime oglindite este >> " << sumaNrPrime << endl;
// La final eliberăm memoria
delete[] numere;
return 0;
}