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!