Zadanie z krążkami, błąd w pętli while

0

Robię właśnie zadanie z tej strony: http://main.edu.pl/pl/archive/oi/13/kra
Mój pomysł na rozwiązanie go polega na tym,że od początkowej głębokości tuby odcinam te miejsca w dół,gdzie krążek nie może już wejść. Wiem,że problem leży gdzieś w pętli while,ale nie wiem co konkretnie robię tam źle. Bardzo proszę o pomoc!

 include <iostream>
 
using namespace std;
 
int main()
{
    int ileKrazkow = 0;
    int glebokosc = 0;
    int poziomTuby,krazek = 0;
 
    cin >> glebokosc;
    int tabSzerTuby[glebokosc];
 
    cin >> ileKrazkow;
    int tabSzerKrazkow[ileKrazkow];
 
    for(int i=0; i<glebokosc; i++){         //Wypelniamy tablice z szerokosciami tuby
        cin>>tabSzerTuby;
    }
    for(int i=0; i<ileKrazkow; i++){        // Pobieramy dane dot. wielkosci krazkow
        cin>>tabSzerKrazkow;
    }
    if(ileKrazkow >= glebokosc || glebokosc < 1){   //Sprawdzamy,czy ilosc krazkow nie jest wieksza od ilosci Krazkow lub glebokosc nie jest mniejsza niz 1
            cout<<0;
    }else if(ileKrazkow == 0){
        cout<<glebokosc;
    }else{
        while((tabSzerKrazkow[krazek] <= tabSzerTuby[poziomTuby]) && (poziomTuby < glebokosc) && (krazek <= ileKrazkow)){ //TU pojawia się problem
            poziomTuby++;
        }
        if(poziomTuby == glebokosc){
            glebokosc--;
            krazek++;
        }if(tabSzerKrazkow[krazek] > tabSzerTuby[poziomTuby]){
            glebokosc = poziomTuby - 1;
            krazek++;
        }
    }
    cout<<glebokosc;
    }
0

Debugger odpalić i będziesz wiedział co jest nie tak.

Na pierwszy rzut oka to podejrzanie wygląda:

if(poziomTuby == glebokosc){
    glebokosc--;
    krazek++;
}if(tabSzerKrazkow[krazek] > tabSzerTuby[poziomTuby]){
    glebokosc = poziomTuby - 1;
    krazek++;
}

To nie jest w pętli, więc wykonuje się tylko raz w całym programie.

0

właśnie zmieniłem ten fragment kodu na

{while(krazek <= ileKrazkow){
        while((tabSzerKrazkow[krazek] <= tabSzerTuby[poziomTuby]) && (poziomTuby < glebokosc)){
            poziomTuby++;
        }
        if(poziomTuby == glebokosc){
            glebokosc--;
            krazek++;
        }if(tabSzerKrazkow[krazek] > tabSzerTuby[poziomTuby]){
            glebokosc = poziomTuby - 1;
            krazek++;
        }
      }
    } 

i ciągle nie działa... :/

1

Zacznij od przeczytania jakiegoś kursu, bo wygląda na to że nie potrafisz wczytać tablicy.
Nie używaj i++ kiedy możesz użyć ++i ten brzydki nawyk tobie się zemści.
Zmień nieco algorytm.
Najpierw możesz zmienić dane wejściowe rurki z: 5 cm, 6 cm, 4 cm, 3 cm, 6 cm, 2 cm i 3 cm.
na: 5, 5, 4, 3, 3, 2, 2
Czyli jeżeli niżej rurka się poszerza to i tak jest to to samo co ta wyższa.
Po takiej zmianie możesz szukać poziomu metodą połowienia, czyli zamiast O(n) masz O(log(n))

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