Mam tu taki program do napisania w C++.
Wpisujemy sekwencję nawiasów i program ma sprawdzać czy one są prawidłowo ułożone np ()()(())() jest prawidłowo a )()))( nie jest.
Nie mam pomysłu jak to zrobić.
Dziwne zadanie z nawiasami
- Rejestracja: dni
- Ostatnio: dni
- Postów: 243
- Rejestracja: dni
- Ostatnio: dni
- Postów: 4883
jedno z rozwiazan. Jest najprostsze do zaimplementowania moim zdaniem, lecz troszke zasobozerne ;) Jednak watpie zebys potrzebowal super optymalnej wersji
wez ten napis i znajduj (). Kasuj z tego napisu znalezniony (). Rob to dopoki size > 2 pozniej gdy size bedzie 2. To sprawdzasz co Ci zwroci find. Jezeli pozycje to wszystkie beda poprawne, jezeli -1 to wtedy nie sa w odpowiedniej pozycji lub po prostu jest tylko jeden element
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 13042
Zrób sobie licznik, na samym początku ustaw go na zero i iteruj znak po znaku - inkrementuj ten licznik po napotkaniu ( i dekrementuj przy ).
Jeżeli w którymś momencie jego wartość spadnie poniżej zera, nawiasy są źle ułożone.
Będą źle ułożone również, gdy pod koniec jego wartość będzie różna od zera.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Kraków
- Postów: 467
Stwórz jakąś zmienną, zainicjalizuj zerem.
Potem przeiteruj po tej sekwencji i dla każdego nawiasu dodawaj 1 do tej zmiennej jeśli nawias jest otwierający, odejmuj 1 jeśli jest zamykający. Jeśli po którejkolwiek iteracji zmienna będzie < 0 to nawiasy są ułożone nieprawidłowo.
Na wyjściu zmienna musi wynosić 0
no kurde 4 sekundy za późno ;D
- Rejestracja: dni
- Ostatnio: dni
- Postów: 243
Dzięki panowie. Udało mi się nawet napisać program:
#include <iostream>
using namespace std;
int main()
{
cout << "Wprowadz nawiasy" << endl;
string nawiasy;
cin >> nawiasy;
int licznik=0;
for(int i=0;i<nawiasy.length();i++)
{
if(nawiasy[i]=='(') licznik++;
else if (nawiasy[i]==')') licznik--;
if (licznik<0)
{
cout << "Nawiasy sa zle ulozone";
return 0;
}
}
if (licznik==0)
cout << "Nawiasy sa prawidlowo ulozone";
else
cout << "Nawiasy sa zle ulozone";
return 0;
}