Se citeşte de la tastatură un număr natural n, 0 ScrieŃi un program care să determine, dacă există, un număr natural care este strict mai mare decât n
şi care are exact aceleaşi cifre ca şi n.
Programul va afişa pe ecran mesajul EXISTA, urmat de numărul determinat, dacă un astfel de număr
există; în caz contrar va afişa pe ecran mesajul NU EXISTA

Exemple
Pentru n=16, se va afişa EXISTA 61
Pentru n=50 se va afişa NU EXISTA

Răspuns :

Răspuns:

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

   int n,i,r,a[100],b[100],j;

   cin>>n;

   i=0;

   while(n!=0)

   {

       r=n%10;

       i++;

       a[i]=r;

       b[i]=r;

       n=n/10;

   }

   sort(a+1,a+i+1);

   int f=0;

   for(j=1;j<=i && f==0;j++)

       if(a[j]!=b[j])

           f=1;

   if(f==0)

       cout<<"NU EXISTA";

   else

   {

       for(j=i;j!=0;j--)

           n=n*10+a[j];

       cout<<"EXISTA"<<" "<<n;

   }

   return 0;

}

Explicație:

Programul copiaza cifrele lui N (in ordine inversa) in vectorul a si b (b este o copie a lui a). Am sortat crescator vectorul a folosind functia sort() din biblioteca algorithm. (in mod normal, vectorul trebuia sortat descrescator pentru a afla cel mai mare numar care se poate forma cu cifrele lui n, dar in vector cifrele apar in ordine inversa -de la dreapta la stanga-, asa ca l-am sortat crescator pentru a obtine cel mai mare numar). Am verificat daca dupa sortare, cifrele de pe aceleasi pozitii ,din cei 2 vectori, au aceasi valoare. Daca da inseamna ca numarul introdus este cel maxim si nu exista altul mai mare ca el. Daca nu, am recostruit vectorul (am plecat cu vectorul de la ultima pozitie ca elementele sa fie in ordine) si l-am afisat pe ecran.

Daca cumva nu ati facut functia sort() pot sa iti refac programul si fara ea.

Sper ca te-am ajutat. Am incercat sa iti explic detaliat cum functioneaza programul, daca ai nelamurir, intreaba-ma!