Zbiór zadań, (zadania różne)
Zadanie 324
Ile razy w XXI wieku, trzynasty dzień miesiąca to piątek?
Rozwiązanie
Liczba piątków trzynastych (jak i każdej innej daty) w ciągu danego roku jest zależna od dnia tygodnia pewnego ustalonego dnia w roku i od tego, czy dany rok jest przestępny. Jeśli za punkt wyjścia przyjmiemy dzień tygodnia w dniu 1 stycznia, to piątek trzynastego przypadnie w miesiącach, które przedstawia poniższa tabela:
dzień tygodnia 1 stycznia | rok zwykły | rok przestępny |
poniedziałek | kwiecień, lipiec | wrzesień, grudzień |
wtorek | wrzesień, grudzień | czerwiec |
środa | czerwiec | marzec, listopad |
czwartek | luty, marzec, listopad | luty, sierpień |
piątek | sierpień | maj |
sobota | maj | październik |
niedziela | styczeń, październik | styczeń, kwiecień, lipiec |
Należy zauważyć, że wyznaczony dzień, uwzględniając przestępność roku, będzie powtarzał się w cyklu co $7 \cdot 4 = 28$ lat. W ciągu tych $28$ lat liczba "piątków trzynastych" jest stała i pojawia się $4\cdot 12 = 48$ razy. W ciągu $100$ lat mamy trzy takie cykle i pozostaje jeszcze 16 lat, dla których na podstawie ustalonego dnia sprawdzamy liczbę wystąpień w roku. Ostatecznie otrzymujemy, że w XXI wieku, piątek trzynastego przypadnie $48 \cdot 3 + 28 = 172$ razy.
Można także sprawdzić każdy rok posługując się kalendarzem i zsumować wartości lub też skorzystać z nieco skomplikowanego wzoru wyznaczającego dzień tygodnia dowolnej daty kalendarza gregoriańskiego (d-m-r):
(d-m-r) - dzień - miesiąc - rok
Niech $M = m-2$.
Jeśli M jest mniejsze od $1$ to do $M$ dodajemy $12$.
Dla stycznia $M=11$, dla lutego $M=12$, dla pozostałych miesięcy $M=m-2$.
Jeśli rok jest przestępny, przyjmijmy $p=1$, w przeciwnym razie $p=0$.
Wzór: $a = (d + \left\lfloor 2.6 \cdot M-0.2 \right\rfloor + (r \mod 100) + \left\lfloor \frac {(r \mod 100)}{4} \right\rfloor + \left\lfloor \frac{r}{400} \right\rfloor - 2\cdot \left\lfloor \frac{r}{100} \right\rfloor - (1+p) \cdot \left\lfloor \frac{M}{11}\right\rfloor) \mod 7$
kalkulator
gdzie $mod$ oznacza resztę z dzielenia, a $ \left\lfloor x \right\rfloor $ to część całkowita z liczby $x$.
Powyższy wzór wyznacza liczbę $a$ - resztę z dzielenia przez $7$.
Dla $a=0$ dniem tygodnia jest niedziela, $a=1$ - poniedziałek, itd. do $a=6$ - sobota.
Poniżej kod w C realizujący zadanie wraz z wypisaniem wszystkich dat.
kod
powrót do zbioru zadań | wersja do druku << poprzednie zadanie następne zadanie >>