Cześć, mam wykonać zadanie, które polega na sortowaniu od największej do najmniejszej, ale jeśli jakaś liczba przechodzi na przykład dwa pola do przodu, to jej wartość zmniejsza się o dwa. wykonałem do tej pory sortowanie i kombinowałem odnośnie tego zmniejszania, ale nie wychodzi Mi to, znaczy się, zmniejszają się wartości, oprócz pierwszej.
przykładowo:
input:
5 - ilość liczb do posortowania
1 2 3 2 4
output
0 2 1 0 0
#include <iostream>
using namespace std;
void sort(int tab[], int w);
int main()
{
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a,n);
for(int i = 0; i < n; i++)
cout << a[i] << endl;
return 0;
}
void sort(int *tab, int w){
for(int i = 1; i < w; i++){
for(int j = (w-1); j >= 1; j--){
if(tab[j] > tab[j-1]){
tab[j-1]--;
int x = tab[j-1];
tab[j-1] = tab[j];
tab[j] = x;
}
}
}
}
Zmniejszanie wartości powinno zawierać się w instrukcji warunkowej if, gdyż ona wykonuje się jeśli dany element jest większy od poprzedniego, czyli wykonuje się przesunięcie.
Będe wdzięczny jeśli ktoś Mi w tym pomoże.