Răspuns :
Dacă ați făcut funcții atunci e simplu. Să facem întâi o funcție care verifică dacă un număr e palindrom. Dacă e, returnează 1, dacă nu - 0.
int palindrom(int n){
int x = 0, t = n;
while(n > 0){
x = x*10 + n%10;
n = n / 10;
}
if(x == t) return 1;
return 0;
}
Acum funcția pentru verificat dacă un număr este prim.
// Adică dacă se împarte la vreun număr de la 2 până la jumătatea lui (inclusiv) atunci nu e prim.
int prim(int n){
if(n < 2) return 0;
if(n == 2) return 1;
for(i=2;i<=n/2;i++)
if(n % i == 0) return 0;
return 1;
}
Avem nevoie de aceste 2 funcții pentru a verifica fiecare număr din vector dacă este palindrom sau prim. De acum să trecem la problema propriu zisă.
1. Citim vectorul
int n, v[100];
cin>>n;
for(i=0;i<n;i++) cin>>v[i];
2. Setăm valorile inițiale (Într-o variabilă numită max_pali și min_prim), valoarea pentru primul palindrom care îl găsim, și valoarea pentru primul număr prim. Facem acest lucru pentru a putea, la căutare, să comparăm fiecare nou palindrom(de exemplu) găsit în vector, cu valoarea anterioară - valoarea din max_pali sau min_prim (la început va fi valoarea setată inițial), și dacă găsim un palindrom mai mare, îl punem pe ăla acolo. Adică, de exemplu, dacă șirul este 23, 121, 989, -121, primul palindrom găsit, a cărui valoare o stocăm ca să o folosim mai încolo, va fi max_pali = 121. Apoi, când parcurgem vectorul, mai găsim un 989, care e mai mare decât 121, îl punem în loc, iar max_pali va fi 121. Și mai găsim un -121, care nu e mai mare, așa că îl ignorăm. Dacă ne gândeam altfel, am fi putut pune un 0 ca valoare inițială în max_pali, și cum găseam un palindrom mai mare, îl puneam acolo, doar că aici ar fi fost o problemă, dacă șirul era format doar din numere întregi negative? Trebuia să luăm cel mai mare cu - :)) și nu puteam dacă noi presupuneam că cel mai mare găsit până în momentul de față este deja 0, pe care noi nici nu l-am avea în vector.
Așadar:
int max_pali, min_prim;
for(i=0;i<n;i++){
if(palindrom(v[i])){
max_pali = v[i];
break;
}
}
for(i=0;i<n;i++){
if(prim(v[i])){
min_prim = v[i];
break;
}
}
3. Acum e gata, avem valorile inițiale, putem parcurge vectorul să găsim cel mai mic număr prim și cel mai mare palindrom
for(i=0;i<n;i++){
if(palindrom(v[i])){
if(v[i] > max_pali) max_pali = v[i];
}
if(prim(v[i])){
if(v[i] < min_prim) min_prim = v[i];
}
}
int palindrom(int n){
int x = 0, t = n;
while(n > 0){
x = x*10 + n%10;
n = n / 10;
}
if(x == t) return 1;
return 0;
}
Acum funcția pentru verificat dacă un număr este prim.
// Adică dacă se împarte la vreun număr de la 2 până la jumătatea lui (inclusiv) atunci nu e prim.
int prim(int n){
if(n < 2) return 0;
if(n == 2) return 1;
for(i=2;i<=n/2;i++)
if(n % i == 0) return 0;
return 1;
}
Avem nevoie de aceste 2 funcții pentru a verifica fiecare număr din vector dacă este palindrom sau prim. De acum să trecem la problema propriu zisă.
1. Citim vectorul
int n, v[100];
cin>>n;
for(i=0;i<n;i++) cin>>v[i];
2. Setăm valorile inițiale (Într-o variabilă numită max_pali și min_prim), valoarea pentru primul palindrom care îl găsim, și valoarea pentru primul număr prim. Facem acest lucru pentru a putea, la căutare, să comparăm fiecare nou palindrom(de exemplu) găsit în vector, cu valoarea anterioară - valoarea din max_pali sau min_prim (la început va fi valoarea setată inițial), și dacă găsim un palindrom mai mare, îl punem pe ăla acolo. Adică, de exemplu, dacă șirul este 23, 121, 989, -121, primul palindrom găsit, a cărui valoare o stocăm ca să o folosim mai încolo, va fi max_pali = 121. Apoi, când parcurgem vectorul, mai găsim un 989, care e mai mare decât 121, îl punem în loc, iar max_pali va fi 121. Și mai găsim un -121, care nu e mai mare, așa că îl ignorăm. Dacă ne gândeam altfel, am fi putut pune un 0 ca valoare inițială în max_pali, și cum găseam un palindrom mai mare, îl puneam acolo, doar că aici ar fi fost o problemă, dacă șirul era format doar din numere întregi negative? Trebuia să luăm cel mai mare cu - :)) și nu puteam dacă noi presupuneam că cel mai mare găsit până în momentul de față este deja 0, pe care noi nici nu l-am avea în vector.
Așadar:
int max_pali, min_prim;
for(i=0;i<n;i++){
if(palindrom(v[i])){
max_pali = v[i];
break;
}
}
for(i=0;i<n;i++){
if(prim(v[i])){
min_prim = v[i];
break;
}
}
3. Acum e gata, avem valorile inițiale, putem parcurge vectorul să găsim cel mai mic număr prim și cel mai mare palindrom
for(i=0;i<n;i++){
if(palindrom(v[i])){
if(v[i] > max_pali) max_pali = v[i];
}
if(prim(v[i])){
if(v[i] < min_prim) min_prim = v[i];
}
}
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile disponibile v-au fost utile și inspiraționale. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, suntem aici pentru a vă ajuta. Ne face plăcere să vă revedem și vă invităm să adăugați site-ul nostru la favorite pentru acces rapid!