Tutorial
Whoops
Po kolejnych poprawkach:
var d,n,i : longint; f : array[0..20000] of longint; begin readln(d); while (d>0) do begin d:=d-1; readln(n); f[0]:=0; f[1]:=1; for i:=2 to n do f[i]:=f[i-1]+f[i-2]; writeln(f[n] mod 10000); end; end.
Wys³anie takiego programu spowoduje, ¿e Sprawdzarka zwróci ocenê:
Wrong Answer
Oznacza to, ¿e program wykona³ siê prawid³owo i nie przekroczy³ dopuszczalnego czasu, ale da³ z³± odpowied¼. W tym przypadku wkrad³ siê nam b³±d w implementacji (poprawnego) algorytmu. Z pozoru wygl±da wszystko dobrze, ale liczby Fibonacciego s± bardzo du¿e i ich reprezentacja nie zmie¶ci siê w typie longint, przez co "przekrêca siê licznik" i powstaj± bzdurne warto¶ci (powinni¶cie dowiedzieæ siê jakie ograniczenia maj± poszczególne typy). Je¿eli nie chcecie pisaæ w³asnej obs³ugi du¿ych liczb (a pewnie nie chcecie), to wystarczy, ¿e bêdziecie w tablicy f trzymaæ liczby Fibonacciego modulo 10000, zamiast pe³ne liczby i wykonywaæ operacjê modulo na samym koñcu.
Ten konkretny b³±d da siê wykryæ testuj±c program na swoim stanowisku na danych z tre¶ci zadania. Czêsto jednak bêdzie tak, ¿e na danych z tre¶ci (które zazwyczaj s± do¶æ proste) Wasz program bêdzie dzia³a³ poprawnie, a na testach na Sprawdzarce bêdzie dawa³ b³êdne wyniki. Zalecamy aby¶cie przed wys³aniem rozwi±zania do oceny przeprowadzili kilka w³asnych testów (choæ i to nie zawsze pomaga). W razie znalezienia danych wej¶ciowych, na których program dzia³a ¼le, przydatnym narzêdziem do wykrycia miejsca b³êdu mo¿e siê okazaæ debugger, ale zalecamy te¿ przemy¶lenie kodu programu. Mo¿ecie te¿ wys³aæ program do wydrukowania, tak aby szukaj±c b³êdów w swoim programie nie blokowaæ komputera pozosta³ym cz³onkom dru¿yny.
Uwaga! Wasz program mo¿e dzia³aæ nieprawid³owo nie tylko dlatego, ¿e pope³nili¶cie b³±d w implementacji, ale tak¿e dlatego, ¿e sam algorytm jest z³y. Zamiast szukaæ b³êdu w kodzie, zastanówcie siê, czy aby na pewno Wasz pomys³ na rozwi±zanie jest poprawny. Zastanówcie siê te¿ czy Wasz program bêdzie prawid³owo dzia³a³ dla wszystkich mo¿liwych przypadków szczególnych (np. najmniejszych mo¿liwych liczb). W³a¶nie fakt, i¿ program myli siê dla pewnych z³o¶liwych/szczególnych danych jest jedn± z czêstszych przyczyn oceny Wrong Answer.