Răspuns :
Salut,
Partea din cod care pune probleme este cea in care faci sortarea in mod descrescator. Faci inversiunea dintre 2 elemente pentru valorile numerelor, dar nu faci inversiunea si pentru numarul de divizori.
Un exemplu simplu
Sa zicem ca ai datele de intrare
6
12 32 19 43 14 21
Aceste numere au numarul de divizori
6 6 2 2 4 4
Pana la pozitia a treia nu se intampla nimic, pentru ca deja sunt descrescator
la a treia pozitie, compara 2 cu 2, sunt acelasi, dar 19<43, deci nu se face inversiunea
compara apoi 2 cu 4, 2<4 atunci se face inversiunea DOAR de numere, deci sirul devine 12 32 14 43 19 21 dar sirul cu numarul de divizori ramane 6 6 2 2 4 4. Apoi face comparatia cu urmatorul numar: 2 fata de 4. 2 este mai mic fata de 4, atunci se face inversiunea, si avem
12 32 21 43 19 14
Din acest moment, 14 va aparea dupa 21, si algoritmul da gres.
Deci tot ce trebuie sa faci este sa faci schimbarea de elemente si in vectorul a
for(i=1; i<b; i++)
for(j=i+1; j<=b; j++)
if((a[i]<a[j] ) || (a[i]==a[j] && v[i]>v[j]))
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
Partea din cod care pune probleme este cea in care faci sortarea in mod descrescator. Faci inversiunea dintre 2 elemente pentru valorile numerelor, dar nu faci inversiunea si pentru numarul de divizori.
Un exemplu simplu
Sa zicem ca ai datele de intrare
6
12 32 19 43 14 21
Aceste numere au numarul de divizori
6 6 2 2 4 4
Pana la pozitia a treia nu se intampla nimic, pentru ca deja sunt descrescator
la a treia pozitie, compara 2 cu 2, sunt acelasi, dar 19<43, deci nu se face inversiunea
compara apoi 2 cu 4, 2<4 atunci se face inversiunea DOAR de numere, deci sirul devine 12 32 14 43 19 21 dar sirul cu numarul de divizori ramane 6 6 2 2 4 4. Apoi face comparatia cu urmatorul numar: 2 fata de 4. 2 este mai mic fata de 4, atunci se face inversiunea, si avem
12 32 21 43 19 14
Din acest moment, 14 va aparea dupa 21, si algoritmul da gres.
Deci tot ce trebuie sa faci este sa faci schimbarea de elemente si in vectorul a
for(i=1; i<b; i++)
for(j=i+1; j<=b; j++)
if((a[i]<a[j] ) || (a[i]==a[j] && v[i]>v[j]))
{
aux=v[i];
v[i]=v[j];
v[j]=aux;
aux=a[i];
a[i]=a[j];
a[j]=aux;
}