Tutorial

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ą:

#include <stdio.h>
int d,n,i;
int f[200];

int main()
{
  scanf("%d\n",&d);
  while (d--)
  {
    scanf("%d\n",&n);
    f[0]=0; f[1]=1;
    for (i=2; i<=n; i++) f[i]=(f[i-1]+f[i-2])%10000;
    printf("%d\n",f[n]);
  }
  return 0;
}

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 ;).