👤

Se da un vector v cu n elemente numere intregi. Sa se afiseze cel mai mare numar palindrom din vector.
Pentru acelasi vector sa se afiseze cel mai mic numar prim.
Va rog, ajutati-ma! Nu ma pricep la informatica si dau test din aceste exercitii pe care ar trebui sa le fac singur, dar nu inteleg cum anume...


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];
    }
}