Przesunięcie z porównaniem wartości

0

Cześć, mam pewien problem do rozwiązania. Możecie mnie nakierować w jaki sposób się do tego zabrać i jak to rozwiązać?

Zamienić miejscami kolumnę o indeksie [j] z kolumną o indeksie [j+1], jeśli wartość w pierwszym wierszu kolumny [j] jest większa od wartości w pierwszym wierszu kolumny [j+1].

1

Porównujesz pierwsze elementy kolumny i jeżeli trzeba wymieniać to w pętli po wierszach wymieniasz miejscami elementy z dwóch kolumn.
W zasadzie jeżeli użyjesz vector oraz formalnie transponujesz tablicę to w zasadzie masz:

vector<vector<int>> tb(ColCount,vector<int>(RowCount));
j=0;
if(tb[j].front()>tb[j+1].front()) tb[j].swap(tb[j+1]);
0

znaczy się zakładam że to tablica z dwoma wymiarami. Kolega podał wyżej proste rozwiązanie ale jak szukasz czegoś łopatologicznego
link

oczywiście trzeba to przerobić ale masz od czego zacząć.

0

Udało mi się coś takiego, ale mam błędy jakieś z podmianą jeszcze. "część działa" poprawnie.

    for (int x=0; x<1; x++)
    {
        for(int y=0; y<k-1; y++)
        {
            if ( A[x][y].cena > A[x][y+1].cena)
            {
                temp = A[x][y+1];
                for (int x=0; x<k; x++)
                {
                    A[x][y].cena = A[x][y+1].cena;
                }
                A[x][y+1] = temp;
            }
        }
    } cout << endl;

0

Może rozrysuj to na kartce, z tablicy:

1 2 5 3
2 3 4 5
3 4 5 6
7 8 9 0

Musisz dostać:

1 2 3 5
2 3 5 4
3 4 6 5
7 8 0 9

Spróbowałeś zaadaptować niewłaściwy algorytm

0

@bifed85954:

A istotą zagadnienia jest co ?
Mam na myśli, że zależnie od zagadnienia, można postarać się o bardziej dopasowaną strukturę danych.
Na przykład z lepszą ekspresją zamiarów "co naprawdę chcę".
Np jednowymiarowa tablicą struktur (powtarzam: zależnie od zagadnienia)

0
_13th_Dragon napisał(a):

Może rozrysuj to na kartce, z tablicy:

1 2 5 3
2 3 4 5
3 4 5 6
7 8 9 0

Musisz dostać:

1 2 3 5
2 3 5 4
3 4 6 5
7 8 0 9

Spróbowałeś zaadaptować niewłaściwy algorytm

Zamienia mi tylko na początku, później już jest problem.
Najlepiej widać to w kompilatorze.

0
bifed85954 napisał(a):

Zamienia mi tylko na początku, później już jest problem.
Najlepiej widać to w kompilatorze.

W kompilatorze tego nie widać na 300%, może miałeś na myśli pod IDE w trybie debugowania.
Dla mnie widać to wprost w kodzie - nie wiesz co robisz próbujesz zgadnąć jaki ma być kod - to się nie ma szansy się udać, to znaczy są ale mniejsze niż na co tygodniową przez rok wygraną w totolotka.
Zrób rysunek na kartce i koduj wg rysunku.

0
_13th_Dragon napisał(a):
bifed85954 napisał(a):

Zamienia mi tylko na początku, później już jest problem.
Najlepiej widać to w kompilatorze.

W kompilatorze tego nie widać na 300%, może miałeś na myśli pod IDE w trybie debugowania.
Dla mnie widać to wprost w kodzie - nie wiesz co robisz próbujesz zgadnąć jaki ma być kod - to się nie ma szansy się udać, to znaczy są ale mniejsze niż na co tygodniową przez rok wygraną w totolotka.
Zrób rysunek na kartce i koduj wg rysunku.

    for (int x=0; x<1; x++)
    {
        for (int y=0; y<n-1; y++)
        {
            if (tab[x][y] > tab[x][y+1])
            {
                for (int x=0; x<n; x++)
                {
                    tab[x][y] = tab[x][y+1];
                }
            }
        }
    }

Ten kod działa mi prawidłowo na czystym projekcie, lecz gdy przerabiam go do właściwego to już źle się dzieje.

2
bifed85954 napisał(a):

Ten kod działa mi prawidłowo na czystym projekcie, lecz gdy przerabiam go do właściwego to już źle się dzieje.

Nie może on działać dobrze ponieważ masz pomieszanie z poplątaniem.
Masz dwie pętle po x włożone jedną w drugą.
Masz niepotrzebną pętle która właściwie nic nie robi.
Masz pomieszane wiersze z kolumnami.
Masz założenie że macierz jest kwadratowa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1