Se citeste un nr mare. Sa se afiseze daca exista cel mai mic nr. care se poate forma din cifrele acestuia si care sa fie mai mare decat nr. initial.
#include<iostream>
using namespace std;
int main()
{int n,i,a[100],aux,poz,j;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
{cout<<"a["<<i<<"]=";cin>>a[i];}
poz=n-1;
while(poz>0 && a[poz-1]>=a[poz])
poz--;
if(poz==0){cout<<"nu exista";return 0;}
for(j=n-1;j>poz-1;j--)
if(a[j]>a[poz-1])
break;
aux=a[j];
a[j]=a[poz-1];
a[poz-1]=aux;
for(i=poz;i<=(n-1+poz)/2;i++)
{aux=a[i];
a[i]=a[poz+n-1-i];
a[poz+n-1-i]=aux;}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
}
2) Generarea permutarilor sirului {1,2,3,4}
#include<iostream>
using namespace std;
int main()
{int n,i,a[100],aux,poz,j;
cout<<"n=";cin>>n;
for(i=0;i<n;i++)
a[i]=i+1;
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
while (1)
{
poz=n-1;
while(poz>0 && a[poz-1]>=a[poz])
poz--;
if(poz==0)return 0;
for(j=n-1;j>poz-1;j--)
if(a[j]>a[poz-1])
break;
aux=a[j];
a[j]=a[poz-1];
a[poz-1]=aux;
for(i=poz;i<=(n-1+poz)/2;i++)
{aux=a[i];
a[i]=a[poz+n-1-i];
a[poz+n-1-i]=aux;}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}