Se dau n numere naturale. Se numește număr par asociat unui număr x numărul obținut din cifrele pare ale lui x luate în ordinea în care apar ele în x. De exemplu, numărul 3246456 are ca număr par asociat pe 24646, iar 37030 pe 0. Dacă numărul nu are cifre pare, atunci el nu are număr par asociat. Numărul 3731 nu are număr par asociat.
Se cere să se determine câte dintre cele n numere citite au numărul par asociat palindrom. Se numește palindom un număr care citit de la dreapta la stânga are aceeași valoare.

Răspuns :

Explicație:

#include <iostream>

using namespace std;

int main()

{

   int n, sir[100];//declaram n si un sir de numare de tip vector

   cout<<"n este ";

   cin>>n;//citim n

   for(int i=0;i<n;i++)

   {

       cout<<"elementul "<<i<<" din sir este ";

       cin>>sir[i];//citim elementele sirului

   }

   int x,p,c,z,ogl,y,k,a;//declaram variabilele ce le vom folosi mai departe

   k=0;//k reprezinta numarul numerelor care au numarul par asociat palindrom, pe care il initializam cu 0

   a=0//initializam cu 0 numarul de numere care au numar par asociat

   for(int i=0;i<n;i++)//parcurgem vectorul (sirul)

   {

       x=sir[i];//trecem, pe rand, fiecare valoare din sir intr-o noua variabila pentru a nu-i pierde valoarea

       z=0;//initializam cu 0 numarul de cifre pare

       p=0;//initializam cu 0 numarul par asociat pe care il vom construi mai jos

       while(x!=0)//repetam instructiunile de mai jos cat timp x nu este 0

       {

           c=x%10;//determinam ultima cifra a lui x

           if(c%2==0)//testam daca ultima cifra este para si in caz afirmativ, executam blocul de intructiuni de mai jos (cele 2 instructiuni din if)

           {

               p=p*10+c;//construim numarul p (acesta la iesirea definitiva din while va fi oglinditul numarului par asociat)

               z++;//numaram cate cifre pare are numarul x

           }

           x=x/10;//x devine catul (nu restul) impartirii lui x la 10 pentru a vedea radicalul ramas dupa folosirea ultimei cifre (!!!! intructiunea se executa chiar daca valoarea lui if este negativa, deoarece aceasta nu face parte din if !!!!)

       }

       ogl=0;//initializam cu 0 oglinditul numarului par asociat

       y=p;//trecem numarul construit mai sus intr-o noua variabila pentru a nu-i pierde valoarea

       if(z!=0)//testam daca numarul are cifre pare si in caz afirmativ executam while, altfel trecem mai departe

       while(y!=0)//repetam instructiunile de mai jos cat timp y nu este 0

       {

           ogl=ogl*10+y%10;//construim oglinditul lui p

           y=y/10;x devine catul (nu restul) impartirii lui y la 10 pentru a vedea radicalul ramas dupa folosirea ultimei cifre

       }

       if(z==0)//testam daca numarul are sau nu cifre pare

           cout<<"numarul "<<sir[i]<<" de pe pozitia "<<i<<" are toate cifrele impare si nu are numar par asociat"<<endl;//daca z este 0 atunci executam aceasta intructiune si spunem ca numarul este impar

       else//altfel, in cazul in care z nu este 0

       {

           cout<<"numarul par asociat numarului <<sir[i]<<" de pe pozitia "<<i<<" din sir este "<<ogl<<endl;//afisam numarul par asociat

            a++//numarul de numere care au numar par asociat creste

       }

       if(p==ogl && z!=0)//testam daca numarul par asociat este sau nu palindrom

           k++;//in caz afirmativ, k creste cu o unitate

   }

   if(a!=0)//testam daca exista numere care au numar par asociat

   cout<<"numarul numerelor din sir care au numarul par asociat palindrom este "<<k;//afisam k in caz afirmativ

   else//altfel

   cout<<"niciun numar nu are numar par asociat";//mesaj scris in caz negativ

   return 0;

}