[C++] SPOJ - Stos
Ostatnio zmodyfikowano 2019-12-17 22:48
RareKey_v2 Temat założony przez niniejszego użytkownika |
[C++] SPOJ - Stos » 2019-12-17 17:51:29 Witam, Napisz program, który w 10-elementowej tablicy symuluje działanie stosu. Na początku stos jest pusty, a następnie ma się zapełniać lub opróżniać zgodnie z wczytanymi z wejścia poleceniami. Wejście Na wejście programu podana zostanie pewna nieokreślona liczba zestawów danych. Zestawy składają się albo z jednej linii zawierającej znak - (polecenie zdjęcia liczby ze stosu i wypisania jej na wyjście), albo dwóch linii, z których pierwsza zawiera znak + (polecenie wstawienia liczby na stos), a druga niewielką liczbę całkowitą. Poszczególne zestawy zostaną rozdzielone znakiem nowej linii. Wyjście Na wyjściu programu ma się pojawić ciąg napisów będących rezultatem wykonania pojawiających się na wejściu poleceń (jeżeli polecenie udało się wykonać, to wypisujemy jego rezultat: w przypadku wstawienia liczby na stos wypisujemy ':)'; w przypadku zdjęcia liczby jej wartość; w przypadku błędu ':('). Poszczególne napisy należy rozdzielić znakami nowej linii. Wykonałem wszystko zgodnie z poleceniem, chociaż kiedy daje kod do zaliczenia to wyskakuję komunikat: "Przekroczono limit czasu". Kod: #include <iostream>
using namespace std;
int tablica[ 10 ]; int rozmiar;
void push() { if( rozmiar >= 10 ) cout << "):" << endl; else { cin >> tablica[ rozmiar ]; rozmiar = rozmiar + 1; cout << "(:" << endl; } }
void pop() { if( rozmiar < 1 ) cout << "):" << endl; else { cout << tablica[ rozmiar - 1 ] << endl; rozmiar = rozmiar - 1; } }
int main() { char a; for(;; ) { cin >> a; if( a == '+' ) { push(); } else if( a == '-' ) { pop(); } else cout << "):" << endl; } return 0; }
Z góry dziękuję za pomoc. |
|
pekfos |
» 2019-12-17 18:09:40 |
|
RareKey_v2 Temat założony przez niniejszego użytkownika |
» 2019-12-17 18:57:14 Już nie ma pętli nieskończonej. Nie wiem czy o to chodziło, bo teraz wyskakuję "Błędna odpowiedź" chociaż wyniki wychodzą tak jak należy. #include <iostream>
using namespace std;
int tablica[ 10 ]; int rozmiar;
void push() { if( rozmiar >= 10 ) cout << ":(" << endl; else { cin >> tablica[ rozmiar ]; rozmiar = rozmiar + 1; cout << ":)" << endl; } }
void pop() { if( rozmiar < 1 ) cout << ":(" << endl; else { cout << tablica[ rozmiar - 1 ] << endl; rozmiar = rozmiar - 1; } }
int main() { int d; char a; cout << "Podaj liczbe testow:"; cin >> d; for( int x = 0; x <= d; x++ ) { cin >> a; if( a == '+' ) { push(); } else if( a == '-' ) { pop(); } else cout << ":(" << endl; } return 0; }
|
|
pekfos |
» 2019-12-17 19:33:21 Wejście przyjmowane przez program jest niezgodne ze specyfikacją z zadania. |
|
RareKey_v2 Temat założony przez niniejszego użytkownika |
» 2019-12-17 19:40:12 Chodzi o to ? cout << "Podaj liczbe testow:"; cin >> d;
|
|
pekfos |
» 2019-12-17 20:09:51 A zadanie mówi coś, że ilość danych jest z góry podana? Masz wczytywać, aż się skończą. |
|
RareKey_v2 Temat założony przez niniejszego użytkownika |
» 2019-12-17 21:38:14 Zmieniłem to, ale nadal:" Błędna odpowiedź". #include <iostream>
using namespace std;
int tablica[ 10 ]; int rozmiar;
void push() { if( rozmiar >= 10 ) cout << ":(" << endl; else { cin >> tablica[ rozmiar ]; rozmiar = rozmiar + 1; cout << ":)" << endl; } }
void pop() { if( rozmiar < 1 ) cout << ":(" << endl; else { cout << tablica[ rozmiar - 1 ] << endl; rozmiar = rozmiar - 1; } }
int main() { int d; char a; while( cin >> a ) { if( a == '+' ) { push(); } else if( a == '-' ) { pop(); } else cout << ":(" << endl; } return 0; }
|
|
nanoant20 |
» 2019-12-17 22:18:17 w petli while usuń else cout << ":(" << endl; i pop() jest do poprawienia
if( warunek ) { cout << tablica[ rozmiar - 1 ] << endl; rozmiar = rozmiar - 1; } else { cout << ":(" << endl; }
|
|
« 1 » 2 |