Olimpiada C++ a Przygotowania

0

Witam. Uczę się w 3 klasie technikum. Programować uczę się sam w domu. Ogólnie sobie radze w pisaniu programów. Ba, nawet dobrze się przy tym bawię. Jednak powoli przychodzi czas na olimpiadę C++ i tu mam do Was pytanie. Jakie artykuły czytać, aby rozwinąć "umiejętność myślenia". Chodzi mi o jakieś ciekawostki programistyczne, niecodzienne rozwiązania. Jeżeli macie jakieś ciekawe zadania z programowania bardzo proszę o wysłanie ich w załączniku. Każda pomoc jest cenna bo nie wiem jak się do tej olimpiady przygotować ;P

5

niecodzienne rozwiązania

Poprzeglądaj parę razy dziennie dział Newbie, a masz to gwarantowane ;)

Jeżeli macie jakieś ciekawe zadania z programowania (...) nie wiem jak się do tej olimpiady przygotować

SPOJ oraz pochodne.

5

Tak jak wyżej - SPOJ, dodatkowo polecam jeszcze http://projecteuler.net/

0

Ja jeszcze to musiałem przerobić.

0

Własnie wróciłem z olimpiady (ok. 15 miejsce 2/6 zadań). mam do Was pytanie. Dlaczego "#include conio.h" jest niedozwolone na olimpiadach? przecież to jest standardowa biblioteka wejścia / wyjścia w C++. A gościu który pilnował Nas na sali mi odpowiedział, że to kolejne borlandowskie g**no -.- gdyby nie to zrobiłbym 4/6.

I jeszcze jedno. Jak załatwić problem, jeżeli pisze, że dane wejściowe kończy nowy wiersz? "cin >>" nie załatwi problemy, bo muszą być wprowadzone jakieś dane. I na tym też poległem (wiem, wstyd).

1

przecież to jest standardowa biblioteka wejścia / wyjścia w C++

Jest zupełnie na odwrót!
conio.h to jedynie borlandowski dodatek, nie wchodzi w skład języka C++, tak więc kompilator nawet nie ma obowiązku jej obsługiwać.
... poza tym jest Windows-only.

Btw, niby czego z tej biblioteki chciałeś użyć na olimpiadzie? :|

0

Chciałem zrobić coś na zasadzie:

 
while(getch() != '\n')
{
}

Ale teraz widzę błąd mego myślenia. A czego w takim razie użyć do rozpoznania "pustej linii" ? Bo takie coś nie przejdzie
cin >> zmienna (Jak klikam enter na pusto po prostu przechodzi kursorem niżej)

0

A czego w takim razie użyć do rozpoznania "pustej linii" ?

Mógłbyś pokazać przykładową treść takiego zadania, w którym jest to wymagane?
Nie widzę sensu ręcznego rozpoznawania w programie pustych linii.

#Edit - zawsze możesz też użyć getline (http://ideone.com/jeOXPk)

0

Są podawane jakieś dane na wejście i podawanie wejścia kończy pusta linia (kompletnie nie wiem o co w tym chodzi). Opadły mi ręce, a resztę programu wiedziałem jak zrobić :(

Treść zadania pomijam - jest nieistotna.

Wejście:
W każdej linii znajduje się liczba kilometrów do przejechania oraz liczba litrów paliwa jaka znajduje się w baku (liczby naturalne mniejsze od 2^16 rozdzielone spacją). Dane kończą się pusta linią.

Wyjście:
Dla każdej linii wejściowej należy w linii wyjściowej podać najkrótszy czas (w minutach), po jakim podróżujący dotrze do celu.

Przykładowe dane:
Wejście:
900 80
900 81
1200 180
2100 261
1200 200

Wyjscie:
0
600
600
1200
600

0

while(cin>>km>>litry) // i nic więcej cie nie powinno interesować.

0

Problem w tym, że nie wiem ile tych danych mam i program w nieskończoność ma się pytać o te litry i kilometry? Rozumiem, że podawanie wejścia kończy liczba -1 lub coś w tym stylu. Ale "pusta linia"?

Sprawdziłem to while(cin >> x >> y), lecz po kliknięciu entera, czyli przejścia do nowej linii nie wpisując danych, kursor przemieszcza się w dół a program się nie kończy. W załączniku rezultat.

EDIT:

Tak w ogóle, to powiedzcie mi wpierw czy ja dobrze rozumiem pojęcie nowa linia.
1 [SPACJA] 12 [ENTER] // dane są wpisane
12 [SPACJA] 123 [ENTER] // dane są wpisane
321 [SPACJA] 56 [ENTER] //dane są wpisane
4 [SPACJA] 94 [ENTER] // dane są wpisane
[ENTER] //teraz nic nie wpisaliśmy a kliknęliśmy ENTER , program ma się zamknąć.

0

Em, zgaduję, iż dlatego, że programy konsolowe należy uruchamiać z konsoli?
Coś w rodzaju program.exe < plik_z_danymi.txt z CMD, skryptu BAT lub czegokolwiek.

Btw, o ile się nie mylę, to można po prostu również wysłać EOF do konsoli, lecz nie jestem sobie w stanie przypomnieć skrótu klawiszowego do tego - poszukaj na MSDN or something.

1

Jeżeli koniecznie potrzebujesz pusty wiersz wyłapać to:

string line;
while((getline(cin,line))&&(line.length()))
  {
   istringstream ss(line);
   ss>>x>>y;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1