Dawidsoni Temat założony przez niniejszego użytkownika |
Pytania o zadania z OIG » 2011-10-29 17:44:31 Witam. Startuję w OIG (olimpiadzie informatycznej gimnazjalistów) i robię tam wiele zadań, które podobno sprawdza maszyna. Mam problem, bo nie wiem, czy gdybym miał w 1 wierszu wczytać kilka liczb (oddzielonych spacjami), a zrobiłbym każdą liczbę w osobnej linijce to byłoby dobrze. Nie wiem też, czy jak dana liczba nie spełni wymagań (np. pisze, że n ma być mniejsze od 10000) to mam wczytywać tą liczbę ponownie, czy nie. Także nie wiadomo mi, czy cały program ma działać w pętli. Wie ktoś, czy takie szczegóły mają znaczenie? A co do tego wczytania w 1 linijce to jak to można zrobić? Jak wiem, ile chcę wczytać liczb, to mogę zrobić to tak: cin >> a >> b >> c; Jednak jak nie znam ilości liczb, to z chęcią ustawiłbym jako ogranicznik spację, a nie enter, ale nie wiem jak to zrobić. Mógłbym też użyć getline, ale wynik tej funkcji jest zapisywany do stringu, więc musiałbym jeszcze zrobić konwersję string na int, a to by spowolniło program (to też się liczy przy wynikach). Wie ktoś jak rozwiązać ten problem? Przydałoby się też wczytać jakoś godzinę w formacie GG:MM. |
|
DejaVu |
» 2011-10-29 18:05:00 Wejdź na stronę Olimpiady Informatycznej, pobierz paczkę testującą i przeczytaj przykładowe zadania :) Generalnie na konkursach dane się wczytuje za pomocą funkcji scanf bądź strumienia cin. Na konkurach format danych wejściowych jest podany. Najlepiej zobacz sobie przykładowe zadania :) |
|
ison |
» 2011-10-29 19:05:15 Mam problem, bo nie wiem, czy gdybym miał w 1 wierszu wczytać kilka liczb (oddzielonych spacjami), a zrobiłbym każdą liczbę w osobnej linijce to byłoby dobrze. |
wczytuj zwyczajnie scanfem (jeśli wczytujesz więcej niż 10 liczb nie używaj iostream, mocno spowalnia). Nie wiem też, czy jak dana liczba nie spełni wymagań (np. pisze, że n ma być mniejsze od 10000) to mam wczytywać tą liczbę ponownie, czy nie. |
Nie, to ograniczenie mówi o tym, że wszystkie liczby w testach będą mniejsze od 10000 (takie narzucenie złożoności algorytmu) Także nie wiadomo mi, czy cały program ma działać w pętli. Wie ktoś, czy takie szczegóły mają znaczenie?
|
Nie ma działać w pętli, program ma wczytać liczbę z wejścia, wypisać wynik i się zakończyć A co do tego wczytania w 1 linijce to jak to można zrobić? Jak wiem, ile chcę wczytać liczb, to mogę zrobić to tak: cin >> a >> b >> c; Jednak jak nie znam ilości liczb, to z chęcią ustawiłbym jako ogranicznik spację, a nie enter, ale nie wiem jak to zrobić. Mógłbym też użyć getline, ale wynik tej funkcji jest zapisywany do stringu, więc musiałbym jeszcze zrobić konwersję string na int, a to by spowolniło program (to też się liczy przy wynikach). Wie ktoś jak rozwiązać ten problem? Przydałoby się też wczytać jakoś godzinę w formacie GG:MM.
|
jeśli nie znasz ilości liczb na wejściu to wczytuj do końca pliku while( scanf( costam ) != EOF )... godzinę możesz wczytać przez scanf( "%d:%d", & godzina, & minuta ); |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-10-29 19:51:51 Wiesz, tylko nie używam funkcji scanf, więc nie wiem zbytnio, jak ustawić, żeby się wczytywało co spację. Mógłbyś dać mi jakiś przykład wczytywania kilku liczb oddzielonych spacjami? |
|
ison |
» 2011-10-29 20:14:53 To niekoniecznie musi być spacja, białych znaków się nie rozróżnia. To nie ma znaczenia czy w treści jest napisane, że dane są podane w oddzielnych wierszach czy w 1 wierszu oddzielone spacjami. int a, b, c; scanf( "%d %d %d", & a, & b, & c );
int a, b, c; std::cin >> a >> b >> c;
w obu przypadkach możesz podać dane zarówno w 1 wierszu jak i w oddzielnych wierszach. |
|
Dawidsoni Temat założony przez niniejszego użytkownika |
» 2011-10-29 20:26:23 To co napisałeś to wiem. Chodzi mi o wczytywanie pojedyncze do 1 zmiennej raz za każdym obiegiem pętli. |
|
ison |
» 2011-10-29 20:31:16 int n; scanf( "%d", & n ); for( int i = 0; i < n; ++i ) { int liczba; scanf( "%d", & liczba ); }
lub jeśli nie znasz ilości liczb na wejściu while( scanf( "%d", & liczba ) != EOF ) { }
|
|
rafal999 |
» 2011-10-29 20:43:00 Warto też dodać, że nie musisz wpisywać wyników do tablicy i na końcu je wypisywać, tylko możesz je wypisywać po każdym obiegu pętli(no chyba że się nie da). |
|
« 1 » 2 3 |