Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytania o zadania z OIG

Ostatnio zmodyfikowano 2013-03-24 15:50
Autor Wiadomość
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.
P-43006
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 :)
P-43008
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 );
P-43015
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?
P-43019
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.

C/C++
int a, b, c;
scanf( "%d %d %d", & a, & b, & c );

C/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.
P-43020
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.
P-43022
ison
» 2011-10-29 20:31:16
C/C++
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

C/C++
while( scanf( "%d", & liczba ) != EOF ) {
   
}
P-43024
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).
P-43027
« 1 » 2 3
  Strona 1 z 3 Następna strona