• Source
    1. #include <iostream>
    2. using namespace std;
    3. // pentru a nu mai scrie mereu "std::" care sa preceada "cin", "cout", ..
    4.  
    5. int main(){
    6. int aux,i,j,k,n,v[20];
    7.  
    8. cout << "Dati n= " << "\n";
    9. cin >> n ;
    10. // Atribuirea initiala v[i]=i si scrierea primei permutari : 1 2 3 ... n
    11. // Apoi trece pe linia urmatoare
    12. for(i=0; i<=n; i++) {v[i]=i; if (i>0) cout << v[i];} cout << "\n";
    13.  
    14. // Incepe secventa principala a programului
    15. do {
    16. k=n;
    17. while (v[k-1] > v[k]) k--;
    18. k--; // Am gasit pozitia k, unde sirul pornit din dreapta coboara
    19.  
    20. if (k>0) {
    21. j=n;
    22. while (v[k]>v[j]) j--;
    23. // ma intereseaza pozitia nr. j
    24. // Adica : de la k+1 incolo caut cel mai mic v[j] dar mai mare decat v[k]
    25.  
    26. aux=v[k]; v[k]=v[j]; v[j]=aux; // schimb v[k] cu v[j]
    27.  
    28. for (i=k+1; i<=(n+k)/2; i++){aux=v[i]; v[i]=v[n+k+1-i]; v[n+k+1-i]=aux;}
    29. // schimb v[i] cu v[n+k+1-i]
    30. // Adica sirul v[k+1], v[k+2], ... , v[n] il intorc invers :)
    31.  
    32. for(i=1; i<=n; i++) {cout << v[i];} cout << "\n";
    33. // tiparesc urmatoarea permutare si trec pe linie noua
    34. }
    35.  
    36. } while (k > 0);
    37.  
    38. return 0;
    39. }