0949 - Calendar 3

From Bitnami MediaWiki

Cerinta

Dându-se o dată calendaristică și un număr nr de zile, să se determine care este data aflată la o diferență de nr de zile.

Date de intrare

Programul citește de la tastatură 3 numere naturale Z, L și A, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile.

Date de iesire

Programul va afișa pe ecran 3 numere naturale ZI, LUNA, AN reprezentând data cerută.

Restrictii si precizari

  • -100.000 ⩽ nr ⩽ 100000
  • Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100
  • Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980
  • Dacă nr este negativ, data cerută se afla înaintea cele curente.

Exemplul 1

Intrare
6 1 2015
15
Iesire
Datele introduse corespund restrictiilor impuse
21 1 2015

Exemplul 2

Intrare
29 2 2015
25
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def adauga_zile(Z, L, A, nr_zile):

   # Functie pentru a adauga un numar de zile la o data calendaristica
   zile_luna = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
   while nr_zile > 0:
       zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28
       Z += 1
       if Z > zile_luna[L]:
           Z = 1
           L += 1
           if L > 12:
               L = 1
               A += 1
       nr_zile -= 1
   return Z, L, A
  1. Citire date de intrare

Z, L, A = map(int, input().split()) nr_zile = int(input())

  1. Rezolvare și afișare rezultat

zi_noua, luna_noua, an_nou = adauga_zile(Z, L, A, nr_zile) print(f"{zi_noua} {luna_noua} {an_nou}")


</syntaxhighlight>