AlexAvram

problema dumitras 28.01

Jan 28th, 2026
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void inserare(int n, int &d)
  6. {
  7.     int nou=0, st, dr, p=1, cn=n;
  8.     //pentru a verifica paritatea numerelor alaturate
  9.     //consider mereu 'st' ca fiind numarul din stanga si dr ca fiind cel din dreapta
  10.     //ex: 12345 in parcurgere arata ceva de genu 12ab5 si pasu urmator 1ab45
  11.     nou=n%10, dr=n%10, n/=10, p*=10;
  12.     //ultima cifra o trec indiferent
  13.     while (n)
  14.     {
  15.         st=n%10;
  16.         if (st%2==dr%2)
  17.             nou=((st+dr)/2)*p+nou, p*=10;
  18.         //daca am caz favorabil, fac media si o adaug la numarul nou
  19.         nou=st*p+nou, p*=10;
  20.  
  21.         n/=10;
  22.         dr=st;
  23.         //numarul din dreapta devine fostul numar din stanga
  24.         //si la urmatoarea iteratie fac rost de un nou numar din stanga
  25.     }
  26.     if (nou==cn)
  27.         d=-1;
  28.     else
  29.         d=nou;
  30.     //suprascriu, am preferat sa lucrez cu 'nou' decat cu 'd'
  31.  
  32.  
  33.     /*
  34.     ca si idee, cand faci oglinditu codu arata ceva de genu:
  35.     ogl=ogl*10+(n%10);
  36.     iar cand incerci sa reconstruiesti un numar:
  37.     nr=(n%10)*p+nr; p*=10;
  38.     unde 'p' e o putere a lui 10 ce incepe initializata p=1;
  39.     */
  40. }
  41. int main()
  42. {
  43.     int n, d;
  44.     cin>>n;
  45.     inserare(n, d);
  46.     cout<<d;
  47.     return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment