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

SPOJ - Stos, niby działa a sędzia wywala błąd

Object Storage Arubacloud
0 głosów
476 wizyt
pytanie zadane 26 września 2017 w SPOJ przez DaViDoWsKy Nowicjusz (150 p.)
zmienione kategorie 26 września 2017 przez Patrycjerz

Witam wszystkich, jestem tutaj nowy i ogólnie w programowaniu...

Mam takie pytanko, niby wszystko działa ok ale wywala błąd w SPOJu, już próbowałem wszystkiego zabezpieczyłem chyba kod przed wszystkim (ktos napisał że cyfry mają być od 0-9) itd itp i nie kumam co jest nie tak...
 

#include <iostream>
using namespace std;

int main()
{
    int stos[10], a,ile=0,w=1;
    string znak;

    while(cin>>znak)
    {
        if(znak=="+")
        {
            if(w!=2)
            {
                if(w==3)ile++;
                w=4;
                cin>>a;
                if(a>=0&&a<10)
                {
                    stos[ile]=a;
                    cout<<":)"<<endl;
                    ile++;
                }
                else
                {
                    cout<<":("<<endl;
                }
            }
            else cout<<":("<<endl;
            if(ile>9)
            {
                w=2;
                ile--;
            }
        }
        else
        {
            if(znak=="-")
            {
                if(w!=1)
                {
                    if(w==4)ile--;
                    w=3;
                    cout<<stos[ile]<<endl;
                    ile--;
                }
                else
                {
                    cout<<":("<<endl;
                }
                if(ile<0)
                {
                    w=1;
                    ile++;
                }
            }
            else
            {
                cout<<":("<<endl;
            }
        }
    }
    return 0;
}

 

komentarz 26 września 2017 przez Patrycjerz Mędrzec (192,320 p.)
Jakiego zadania dotyczy to pytanie? Podaj link. Jaki błąd ci wyskakuje? Podaj dokładny opis, niestety nikt tu nie jest dobry z wróżenia…
komentarz 26 września 2017 przez DaViDoWsKy Nowicjusz (150 p.)
przepraszam, http://pl.spoj.com/problems/STOS/ , Błędna odpowiedź
komentarz 26 września 2017 przez Patrycjerz Mędrzec (192,320 p.)
Niestety nie odpowiedziałeś mi na wszystkie pytania. Jaki błąd ci wyskakuje?
komentarz 26 września 2017 przez DaViDoWsKy Nowicjusz (150 p.)
wyskakuje, że błędna odpowiedź

1 odpowiedź

0 głosów
odpowiedź 27 września 2017 przez Balbi Nowicjusz (180 p.)

Doszedłeś bardzo blisko rozwiązanie nawet bliżej niż ci się zdaje.
Problem polega na tym iż gdy stos jest przepełniony to zmienna "w" jest ustawiana w if-ie na 2 co blokuje z kolei if(w!=2) a jak zobaczysz wewnątrz tego ifa masz  cin>>a; czyli mamy sytuację gdzie while(cin>>znak) ściąga z strumienia znak "+" natomiast   cin>>a; się nie odpali co pozostawi liczbę w strumieniu wejściowym  oraz zwraca znak smutku":("
kolejny obrót pętli wczyta tą liczbę ale jako znak a po sicie if-else znowu zwróci znak ":(" co daje nam dwa smutki w miejscu gdzie powinien być jeden. Rozwiązanie to umieścić cin>>a; przed warunkiem if(w!=2)

#include <iostream>
using namespace std;

int main()
{
    int stos[10], a,ile=0,w=1;
    string znak;

    while(cin>>znak)
    {
        if(znak=="+")
        {
            cin>>a; //wyciagniete z if-a;
            if(w!=2)
            {
                if(w==3)ile++;
                w=4;
                if(a>=0&&a<10)
                {
                    stos[ile]=a;
                    cout<<":)"<<endl;
                    ile++;
                }
                else
                {
                    cout<<":("<<endl;
                }
            }
            else cout<<":("<<endl;
            if(ile>9)
            {
                w=2;
                ile--;
            }
        }
        else
        {
            if(znak=="-")
            {
                if(w!=1)
                {
                    if(w==4)ile--;
                    w=3;
                    cout<<stos[ile]<<endl;
                    ile--;
                }
                else
                {
                    cout<<":("<<endl;
                }
                if(ile<0)
                {
                    w=1;
                    ile++;
                }
            }
            else
            {
                cout<<":("<<endl;
            }
        }
    }
    return 0;
}

 

Podobne pytania

0 głosów
1 odpowiedź 550 wizyt
0 głosów
1 odpowiedź 253 wizyt
pytanie zadane 2 stycznia 2018 w SPOJ przez niezalogowany
0 głosów
1 odpowiedź 142 wizyt
pytanie zadane 20 października 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...