Auć, to boli
Zostawmy już zatem rekurencję, bo w tym zadaniu to jednak nie jest dobry pomysł. Wróćmy do pierwszego kodu z drobną zmianą:
var d,n,i : longint; f : array[0..200] 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]) mod 10000; writeln(f[n]); end; end.
Powyższy program Sprawdzarka oceni również na:
Runtime Error
W tym przypadku powodem takiej odpowiedzi jest zadeklarowanie zbyt małej tablicy. W treści zadania jest napisane, że N ≤ 20000, a zadeklarowana tablica pomieści tylko 200 elementów. Zwykle przy próbie zapisania elementu poza tablicę następuje pisanie po niezaalokowanej (nieswojej) pamięci. Jest to poważnym błędem i dlatego Sprawdzarka zwraca tę ocenę.
Uwaga! Przekroczenie zakresu tablicy nie zawsze objawia się poprzez Runtime Error. Program może nadpisać inne (własne) struktury/tablice/zmienne, co może zaowocować oceną Wrong Answer, albo (co jest mało prawdopodobne) Time Limit Exceeded, jeśli spowoduje to zapętlenie programu. Możecie też mieć szczęście i błąd się w ogóle nie ujawni podczas testowania i program zostanie uznany za poprawny, ale nie liczylibyśmy na to ;).