Metoda sprawdzenia, czy rok jest przestępny (pomoc przy rekurencji)

Odpowiedz Nowy wątek
2013-10-09 13:14
0

Metoda sprawdzenia, czy rok jest przestępny wygląda następująco:
F(1) = 0
F(rok) = (a*F(rok-1)+b+rok) mod m, gdzie a, b i m to wybrane przez scenarzystów parametry.

Jeśli wartość powyższej funkcji dla wybranego roku przekroczy próg (również wymyślony przez scenarzystów), to rok jest przestępny.

Zakładamy, że pierwszego dnia pierwszego miesiąca pierwszego roku mamy pierwszy dzień tygodnia. Dodatkowo obliczenia rozpoczynamy od roku 1

jak zapisac ta funkcje za pomoca rekurencji??

Pozostało 580 znaków

2013-10-09 13:27
0

Przecież ona jest zapisana za pomocą rekurencji o_O

Pozostało 580 znaków

2013-10-09 13:30
0

moze zle sie wyrazilem, jak ta funkcje zapisac za pomoca kodu??

Pozostało 580 znaków

2013-10-09 13:31
0

if, %, return reszta dokładnie tak jak we wzorze.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2013-10-09 13:51

Jak to jak?

if (rok==1) return 0;
else return (a*f(rok-1)+b+rok)%m;
edytowany 1x, ostatnio: Shalom, 2013-10-09 13:51

Pozostało 580 znaków

2013-10-09 13:58
1

Lepiej już tak:

return rok>1?(a*f(rok-1)+b+rok)%m:0;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2013-10-09 13:58

Pozostało 580 znaków

2013-10-09 16:30
0

w linijce : else return (a*f(rok-1)+b+rok)%m; - rok-1 wywala blad

wróżyć z kuli czy z fusów jaki to błąd? - Shalom 2013-10-09 16:45
int f(int rok,int a, int b, int m){ if (rok==1) return 0; else return (a*f(rok-1)+b+rok)%m; } mam tak i nie krzyczy z (rok-1) - studyit 2013-10-09 16:47

Pozostało 580 znaków

2013-10-09 16:54
1

OMG, szkoda słów. Skoro twoja funkcja f() ma więcej niz jeden parametr to pozostałe też musisz przekazać...

else return (a*f(rok-1,a,b,m)+b+rok)%m;
... lub stworzyć globalne stałe lub statyczne stale wewnątrz tej funkcji. - _13th_Dragon 2013-10-09 17:00

Pozostało 580 znaków

2013-10-09 21:06
0

no super, a jakis pomysl zeby to zapisac iteracyjnie??

Pozostało 580 znaków

2013-10-09 22:56
0

Liczysz dla każdego roku od roku 1 do maksymalnie potrzebnego roku.

   unsigned Ymax=1,F=0,a=4,b=2,m=20;
   while(Ymax<=Y)
     {
      cout<<"Y="<<Ymax<<" F="<<F<<endl;
      F=(a*F+b+Ymax)%m;
      ++Ymax;
     }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2013-10-09 22:57

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0