C++ struktury - UsuwanieCIagów
Ostatnio zmodyfikowano 2019-08-23 18:55
bill22 Temat założony przez niniejszego użytkownika |
C++ struktury - UsuwanieCIagów » 2019-08-23 17:26:47 Cześć mam taka funkcje do rozwiazania: funkcję usunCiagi usuwającą ze sznura ciągi sąsiednich elementów sznura w następujący sposób: omijamy K elementów sznura (lub tyle ile jest, gdy jest mniej), następnie usuwamy najdłuższy możliwy ciągły fragment zawierający same wartości nieparzyste (być może pusty), omijamy kolejnych K elementów, usuwamy najdłuższy możliwy ciągły fragment złożony z liczb nieparzystych, itd. (K jest liczbą całkowitą dodatnią będącą parametrem funkcji). Pamięć zajmowana przez usuwane elementy ma zostać zwolniona. Funkcja nie może używać tablic, pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej (wektorów, list, kolejek, itp); poniżej moj Kod void sznur::usunCiagi( int K ) { Node * szuk = pocz; Node * zaszuk = nullptr; Node * koniec = szuk; Node * zaszuk_koniec = nullptr; bool czy_nieparzy = false; while( true ) { for( int i = 0; i < K; i++ ) { if( szuk == nullptr ) { return; } zaszuk = szuk; szuk = szuk->nast; } while( szuk != nullptr ) { Node * koniec2 = szuk->nast; Node * zaszuk2 = szuk; for( int j = 1; j < ileJest; j++ ) { int wartosc = szuk->dane; Node * szuk2 = szuk; if( wartosc % 2 == 1 && czy_nieparzy == true ) { while( szuk2 != koniec2 ) { wartosc = szuk2->dane; szuk2 = szuk2->nast; } } koniec2 = koniec2->nast; zaszuk2 = zaszuk2->nast; } if( zaszuk == nullptr ) { while( pocz != koniec ) { Node * tmp = pocz->nast; delete pocz; pocz = tmp; } szuk = pocz; } else if( zaszuk != nullptr ) { zaszuk->nast = koniec; while( szuk != koniec ) { Node * tmp = szuk->nast; delete szuk; ileJest--; szuk = tmp; } } } } } moze mi ktos wytłumaczyć jak mam usunać same wartosci nieparzyste bo sobie nie moge poradzić z tą funkcja PS sorry że tak wstawiam ale to moj pierwszy raz na tym forum |
|
pekfos |
» 2019-08-23 17:40:50 A masz problem z..? |
|
bill22 Temat założony przez niniejszego użytkownika |
forum » 2019-08-23 18:32:37 problem jest w tym nie wiem jak mam usunąć same wartosci nieparzyste? i nie wiem dlaczego wywala w tym miejscu blad jak wezme debbuer w codeblocks
else if( zaszuk != nullptr ) { zaszuk->nast = koniec; while( szuk != koniec ) { Node * tmp = szuk->nast; delete szuk; ileJest--; szuk = tmp; } } |
|
pekfos |
» 2019-08-23 18:55:53 problem jest w tym nie wiem jak mam usunąć same wartosci nieparzyste? |
To nie jest problem, jaki można mieć z tym zadaniem. Pomijając na razie te całe "omijanie K": usuwamy najdłuższy możliwy ciągły fragment zawierający same wartości nieparzyste |
Usuwanie nie ma tu nic wspólnego z liczbami nieparzystymi. Najpierw masz znaleźć najdłuższy ciąg zawierający tylko liczby nieparzyste, potem masz ten ciąg usunąć. Jeśli już, masz problem z tym pierwszym. Znaleźć ten ciąg możesz jedną pętlą, analogicznie do typowego wyszukiwania maksimum. Kod, który masz, jest co najmniej przekombinowany, o ile w ogóle jest na temat. |
|
« 1 » |