Skocz do zawartości

Problem z zadaniem c++


trybikwe34

Recommended Posts

Cześć mam problem z zadaniem treść przesyłam w postaci zdjęcia a mój kod wygląda tak

void sznur::usun(int K)
{
    Node*zaszuk=nullptr;
    Node*a=pocz;
    while(a!=nullptr && a->nast!=nullptr && a->nast->nast!=nullptr)
    {
        Node*jeden=a;
        Node*dwa=a->nast;
        Node*trzy=a->nast->nast;
        if(jeden->dane==dwa->dane && dwa->dane==trzy->dane)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy->nast;
            }
            else
            {
                pocz=trzy->nast;
            }
            if(zaszuk!=nullptr)
            {
                a=zaszuk->nast;
            }
            else
            {
                a=pocz;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
        }
        else if(dwa->dane<=K)
        {
            if(zaszuk!=nullptr)
            {
                zaszuk->nast=trzy;
            }
            else
            {
                pocz=trzy;
            }
            if(zaszuk!=nullptr)
            {
                a=zaszuk->nast;
            }
            else
            {
                a=pocz;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest=ileJest-3;
        }
        else
        {
            zaszuk=trzy;
            a=zaszuk->nast;
        }
    }
}
//7 7 6 3 3 3 2 1 1 1 1 1 -> 7 7 6 1
//9 9 9 6 6 6 4 -> pusty
//9 7 6 5 5 5 3 2 1 -> 9 7 6 3 2 1

problem polega na tym iż dla drugieo sznura powinien byc pusty ale wyświetla 4 na końcu nie wiem jak zrobić żeby tej 4 nie było nie mam pomysłu na to proszę o pomoc gdzie robię błąd w kodzie z góry dzięki

IMG_20200825_100642.jpg

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Wydaje się, że usuwasz węzły bez odpowiedniego zaktualizowania wskaźników nast dla sąsiednich węzłów. 

Warunek dla dwa->dane <= K - usuwasz trzy węzły (jeden, dwa, trzy)

gdy usuwasz trzy identyczne węzły i gdy dwa->dane <= K) aktualizujesz zaszuk i a w ten sam sposób,  może być mylące i prowadzić do błędów

usuń trzy węzły tylko wtedy, gdy są one identyczne
usuń tylko dwa węzły, gdy dwa->dane <= K
aktualizuj ileJest odpowiednio dla obu przypadków

 

void sznur::usun(int K)
{
    Node *zaszuk = nullptr;
    Node *a = pocz;
    while (a != nullptr && a->nast != nullptr && a->nast->nast != nullptr)
    {
        Node *jeden = a;
        Node *dwa = a->nast;
        Node *trzy = a->nast->nast;

        if (jeden->dane == dwa->dane && dwa->dane == trzy->dane)
        {
            if (zaszuk != nullptr)
            {
                zaszuk->nast = trzy->nast;
            }
            else
            {
                pocz = trzy->nast;
            }
            delete jeden;
            delete dwa;
            delete trzy;
            ileJest -= 3;
            a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
        }
        else if (dwa->dane <= K)
        {
            if (zaszuk != nullptr)
            {
                zaszuk->nast = trzy;
            }
            else
            {
                pocz = trzy;
            }
            delete jeden;
            delete dwa;
            ileJest -= 2;
            a = (zaszuk != nullptr) ? zaszuk->nast : pocz;
        }
        else
        {
            zaszuk = trzy;
            a = trzy->nast;
        }
    }
}


 

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...