/* Algoritm : x[i]=i pt fiecare i=1 la n se ia de la dreapta la stanga fiecare pozitie din x si se verifica daca numarul de pe pezitia respectiva este bine pus, adica numarul numerelor mai mici ca el aflate in stanga lui este egal cu xcod corespunzator. Daca da, atunci se trece la pozitia i-1, daca nu se cauta intre numerele din stanga pozitiei i un nr care sa se potriveasca, adica, adica numarul numerelor mai mici ca el aflate in stanga lui este egal cu xcod corespunzator. Tratara erorilor: - daca nu se gaseste un numar potrivit la un anumit pas atunci se semnaleaza o eroare si programul se opeste. - daca x rezultat este permutare atunci se afiseaza x, altfel se afiseaza un mesaj de eroare. */ #include int x[50], xcod[50], n; void afis(int y[50]) { for(int i=1;i<=n;i++) printf("%i ", y[i]); printf("\n"); } void citire() { printf("n = ");scanf("%i", &n); for( int i=1 ; i<=n ; i++ ) { printf("xcod[%i] = ", i); scanf("%i", &xcod[i]); } } void swap(int &a, int &b) { int c; c=a; a=b; b=c; } int valid(int k) { int i, c=0; for(i=1;i=1 ; i-- ) { c=i; while(valid(i) && c>=1) { swap(x[c], x[i]); c--; swap(x[c], x[i]); } if(c<1) { printf(" [ ERROR ]\n"); return 0; } } return 1; } int main() { citire(); printf("Afisez xcod : \n"); afis(xcod); if(!verifXcod()) return; printf("Afisez x : \n"); afis(x); }