Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zastosowanie stosu

Ostatnio zmodyfikowano 2015-11-18 11:15
Autor Wiadomość
midaged
Temat założony przez niniejszego użytkownika
zastosowanie stosu
» 2015-11-17 23:45:36
Mam problem z takim zadaniem. w sprawdzarce zadań wyskakuje mi:
1 wczytano EOF, a oczekiwano '37'
2 wczytano EOF, a oczekiwano '18'




Pani Irena pracuje w barze Apis. Jej zadaniem jest rozporządzanie talerzami. W barze występują dwa rodzaje talerzy: głębokie oraz płytkie. Dodatkowo, w celu kontroli pracy Pani Ireny, na każdym talerzu znajduje się unikalny numer identyfikacyjny. Pani Irena potrafi wykonywać dwie czynności:

Wydanie talerza. Pani Irena sięga do jednego z dwóch stosów: stosu talerzy głębokich lub stosu talerzy płytkich i wydaje osobie zainteresowanej talerz znajdujący się na wierzchu tego stosu. W trakcie wykonywania tej czynności Pani Irena wypowiada na głos słowo proszę.
Przyjęcie talerza. Pani Irena otrzymuje talerz i kładzie go na wierzch odpowiedniego stosu. W trakcie wykonywania tej czynności wypowiada na głos słowo dziękuję.
Dodatkowo, przy każdym wydaniu talerza Pan Andrzej zapisuje w swoim notesie numer identyfikacyjny wydawanego talerza.
Niestety, Pan Andrzej zgubił swój notes i obawia się zwolnienia z pracy z tego powodu. Pomóż Panu Andrzejowi odtworzyć zapiski w notesie.

Wejście
W pierwszym wierszu wejścia znajduje się liczba   oznaczająca liczbę słów wypowiedzianych przez Panią Irenę w czasie pracy. W każdym z kolejnych  wierszy znajduje się słowo wypowiedziane przez Panią Irenę (prosze lub dziekuje), rodzaj przyjmowanego lub wydawanego talerza (gleboki lub plytki) oraz, jeśli zapis ten oznacza przyjęcie talerza, numer identyfikacyjny przyjętego talerza.

Wyjście
W kolejnych wierszach wyjścia należy wypisać kolejne zapiski z notesu Pana Andrzeja - numery kolejnych talerzy wydawanych przez Panią Irenę.

Przykład
Dla danych wejściowych:

8
dziekuje plytki 1
dziekuje gleboki 15
dziekuje plytki 2
prosze plytki
dziekuje plytki 3
prosze gleboki
prosze plytki
prosze plytki
poprawną odpowiedzią jest:

2
15
3
1




C/C++
#include <cstdio>
#include <stack>
#include <cstring>


using namespace std;

int main()
{
    stack < int > p;
    stack < int > g;
    short int n;
    int t[ n ];
    char s[ 9 ], r[ 8 ];
    scanf( "%hd", & n );
    for( short int a = 0; a < n; a++ )
    {
        scanf( "%s %s", s, r );
        if( strlen( s ) == 8 )
        { scanf( " %d", & t[ a ] );
            if( strlen( r ) == 6 )
                 p.push( t[ a ] );
           
            else
                 g.push( t[ a ] );
           
            t[ a ] = 0;
        }
        else
        {
            if( strlen( r ) == 6 )
            { t[ a ] = p.top();
                p.pop(); }
            else
            {
                t[ a ] = g.top();
                g.pop();
            }
           
        } }
    for( short int b = 0; b < n; b++ )
    { if( t[ b ] != 0 )
             printf( "%d\n", t[ b ] ); }
   
   
   
    return 0;
}
P-140325
1aam2am1
» 2015-11-18 08:14:10
Taka tablica jest zła.
C/C++
short int n;
int t[ n ];
1. Ile wynosi w tamtej chwili n.
2. Tak się nie tworzy tablic ze zmienną / nieznaną długością w czasie kompilacji.
P-140328
j23
» 2015-11-18 11:15:41
Dlaczego używasz strumieni z C, jeśli piszesz w C++? Można przecież tak:
C/C++
int n;
int id;
std::string s1, s2;

std::stack < int > p;
std::stack < int > g;
std::vector < int > w;

std::cin >> n;

while( n-- )
{
    std::cin >> s1 >> s2;
   
    if( s1 == "dziekuje" )
    {
        std::cin >> id;
       
        if( s2 == "plytki" ) p.push( id );
        else g.push( id ); // gleboki
       
    }
    else // prosze
    {
        if( s2 == "plytki" )
        {
            w.push_back( p.top() );
            p.pop();
        }
        else // gleboki
        {
            w.push_back( g.top() );
            g.pop();
        }
    }
}

for( int v: w )
     std::cout << v << '\n';

P-140332
« 1 »
  Strona 1 z 1