• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SPOJ- zadanie STOS_zbyt dlugi czas oczekiwania

Object Storage Arubacloud
0 głosów
191 wizyt
pytanie zadane 20 sierpnia 2018 w SPOJ przez bastek Nowicjusz (190 p.)
zmienione kategorie 21 sierpnia 2018 przez Eryk Andrzejewski

Witam

Z racji tego ze jestem na etapie poznawania struktur danych chcialem sobie przecwiczyc stos.Wiec wybralem cwiczenie na SPOJ-u STOS natomiast wydawalo mi sie ze rozwiazanie jest bardzo proste jak i program ktory stworzylem opierajacy sie jak widac na if-ach.Natomiast ciagle wyskakuje mi komunikat o przekroczonym czasie .

Nie oczekuje konkretnej odpowiedzi tylko wskazowki.Moim zdaniem nie zawiera bledu natomiast nie wiem z czego wynika problem.Czy problem wynika z tego ze program nie opiera sie na funkcjach i przez if-y musi wiecej sprawdzic czy po prostu jest jakis blad w tym programie ktorego nie widze.Kurde napisalem kilka dni temu wrocilem teraz jeszcze raz spojrzalem i nic.

#include <iostream>

using namespace std;
string sign;
int tab[10];
int y=0,x=0;

int main()
{
    while(x==0)
    {
        cin>>sign;
        if (sign=="+")
        {
            cin>>tab[y];
            if( y+1>10)
                cout<<":("<<endl;
            else
            {
                cout<<":)"<<endl;
                    y++;
            }
        }
        else if (sign=="-")
        {
            if( y==0)
            {
                cout<<":("<<endl;
            }

            else
            {
                cout<<y<<endl;
                y--;
            }
        }
        else x=1;
    }
    return 0;
}

 

komentarz 20 sierpnia 2018 przez RafalS VIP (122,820 p.)
link do zadania na spoj?
komentarz 20 sierpnia 2018 przez bastek Nowicjusz (190 p.)
komentarz 21 sierpnia 2018 przez Mariusz08 Maniak (62,300 p.)
Przenieś swoje pytanie do kategorii SPOJ.

1 odpowiedź

+1 głos
odpowiedź 20 sierpnia 2018 przez niezalogowany

Na wejściu znajduje się nieokreślona liczba znaków, więc należałoby sprawdzać kiedy pobieranie zostało zakończone:

while (cin >> sign)
{
	if (sign == "+")
        // ...
komentarz 20 sierpnia 2018 przez bastek Nowicjusz (190 p.)
No wlasnie gdy wrzucilem ...while(cin>>sign).. to w momencie gdy zamiast + czy - wpisze np liczbe to nie konczy pgm. Natomiast gdy wprowadzam zmienna x przy while to w momencie wprowadzenia innego znaku niz + czy -  zmienna x=1 i konczy while.Wydawalo mi sie to dobrym rozwiazaniem
komentarz 20 sierpnia 2018 przez niezalogowany

W programie interaktywnym koniec nastąpi w momencie podania EOF. W przypadku wywoływania exe z gotowymi danymi np w formie pliku tekstowego (tak robi to SPOJ); zakończenie programu to koniec pliku. Nie będą podane żadne inne znaki poza + i -.

komentarz 20 sierpnia 2018 przez bastek Nowicjusz (190 p.)
edycja 20 sierpnia 2018 przez bastek

Wlasnie tez mialem takie przypuszczenia wiec wrzucilem to na Ideone.com zeby przesymulowac z danymi podanymi w zadaniu .Wszystkie wyniki sie zgadzaly az dojechal do konca i zobaczylem liste  ;(   do samego dolu (chyba gdzies koniec byl - tak mysle). Wiec postanowilem przerobic program i dac tak wykluczenie aby tak jak w pgm bylo: ze gdy dajemy minus - a stos jest pusty to otrzymujemy :( natomiast wydedukowalem ze przy nastepnej probie konczy program i zrobilem cos takiego co na symulatorze wyszlo w porzadku.Ale na SPOJU juz nie

#include <iostream>

using namespace std;
string sign;
int tab[11];
int y=0,x=0,number,z=0;

void push()
{
    cin>>number;

    if (y>=10)
    {
        cout<<":("<<endl;
    }
    else
    {
        y++;
        tab[y]=number;
        cout<<":)"<<endl;
    }
}

void pop()
{
    if(y==0)
    {
        if(z!=0) x=1;
        else
        {
            cout<<":("<<endl;
            z++;
        }

    }
    else
    {
        cout<<tab[y]<<endl;
        y--;
    }

}


int main()
{
    while(x==0)
    {
        cin>>sign;
        if(sign=="+" || sign=="-")
        {
            if ( sign=="+")
            {
                push();
            }
            else if (sign=="-")
            {
                pop();
            }

        }
        else
            x=1;
    }

    return 0;
}

 

komentarz 20 sierpnia 2018 przez bastek Nowicjusz (190 p.)
Wiec jak rozumiem najlepiej/najpewniej jest zastosowac End Of File  czyli zakmniecie nastapi gdy skonczy sie plik tekstowy z ktorego pobierane sa dane? Hmm no dobra wniose poprawki do mojego myslenia
komentarz 20 sierpnia 2018 przez niezalogowany

i będziesz sprawdzał czy udało się wczytać dane, lub sprawdzał czy wystąpił koniec pliku:

while (cin >> sign) // false - nie da się pobrać danych koniec
// lub:
while (!cin.eof()) // false - wystąpił eof, koniec pliku/koniec danych

Podobne pytania

0 głosów
1 odpowiedź 129 wizyt
0 głosów
1 odpowiedź 278 wizyt
0 głosów
1 odpowiedź 559 wizyt
pytanie zadane 3 lutego 2016 w Python przez Devero Początkujący (300 p.)

92,555 zapytań

141,402 odpowiedzi

319,544 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...