Jako, że jakiś rok temu miałem ten sam problem i również tutaj pytałem to odpowiem co pomogło mi :).
Miałem problem identyczny, wiedziałem co się dzieje w programach, znałem składnie, tylko jak dochodziło co do czego to nie wiedziałem jak się zabrać po
#include <iostream>
oraz int main ()
:).
Po prostu z kolegą zacząłem pisać "grę" w konsoli. Na początku nie wiedziałem jak się za to zabrać, więc znalazłem poradnik w Internecie. Przeanalizowałem kod i zobaczyłem jak działa, ale on nie był skończony - był napisany gdzieś tak w połowie, może nawet mniej. Więc nie zostało mi nic innego jak skończyć ten projekt.
Po drodze okazało się, że wiele rzeczy trzeba przerobić, pojawiło się naprawdę wiele różnych problemów, nad którymi myślałem godzinami. Ale nie ułatwiałem sobie szukając rozwiązań w Internecie - myślałem dopóki nie wymyśliłem (no prawie, bo musiałem zastosować inne odświeżanie tekstu w konsoli, żeby obraz nie migał, a tego nie umiałem zrobić). W końcu nie skończyłem, bo zatrzymałem się w momencie generowania sensownych map - ciężko było wygenerować mapę, na której woda nie przeplata się co literkę z terenem.
Ale w końcu takie doświadczenie nauczyło mnie od czego zacząć. Później czytając wątki dowiedziałem się o SPOJ-u (tak jak wyżej zaproponowali inni użytkownicy) i zacząłem robić właśnie tamte zadania. Teraz nie mam już takiego problemu z wykorzystaniem tego co potrafię. Oczywiście do sprawnego programowania czeka mnie jeszcze dużo pracy i kodu naklepanego, ale pisanie programów to chyba jedyny sposób, żeby faktycznie się tego nauczyć :).