1013 - Aniversari
Cerinţa[edit | edit source]
Se dau datele de naștere a n persoane, numerotate de la 1 la n, în forma an luna zi. Să se determine numărul de ordine al celei mai tinere și al celei mai în vârstă persoană dintre cele date.
Date de intrare[edit | edit source]
Programul citește de la tastatură numărul n, iar apoi n triplete de numere naturale a l z, reprezentând anul, luna și ziua de naștere a fiecărei persoane.
Date de ieşire[edit | edit source]
Programul va afișa pe ecran două numere p q, reprezentând numărul de ordine al celei mai tinere, respectiv al celei mai în vârstă persoană.
Restricții și precizări[edit | edit source]
- 1 ⩽ n ⩽ 1000
- cele n date calendaristice sunt corecte
- dacă există două sau mai multe persoane cele mai tinere (în vârstă) se va afișa numărul de ordine mai mic
Exemplul 1[edit | edit source]
- Intrare
5 1998 5 26 1987 12 18 1987 9 25 2015 1 16 2015 1 8
- Ieșire
Datele introduse corespund restricțiilor impuse. 4 3
Exemplul 2[edit | edit source]
- Intrare
2 12 7 1990 14 2 2000
- Ieșire
Datele introduse nu corespund restricțiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1013 Aniversari
def validare(n_val, date_nastere_s):
# Verificăm dacă numărul de persoane este în intervalul [1, 1000] if 1 <= n_val <= 1000: # Verificăm dacă data de naștere a fiecărei persoane este validă for an1, luna1, zi1 in date_nastere_s: # Data de naștere este validă dacă anul este între 1 și 9999, luna între 1 și 12, și ziua între 1 și 31 if not(1 <= an1 <= 9999 and 1 <= luna1 <= 12 and 1 <= zi1 <= 31): # Dacă data de naștere nu este validă, ridicăm o excepție raise ValueError # Dacă toate datele de naștere sunt valide, returnăm numărul de persoane return n_val else: # Dacă numărul de persoane nu este în intervalul [1, 1000], ridicăm o excepție raise ValueError
def persoane(numar, data_nastere):
# Inițializăm datele celei mai tinere și celei mai în vârstă persoane data_tanar = (0, 0, 0) data_batran = (9999, 12, 31) numar_tanar = numar_batran = 0
for i in range(numar): # Parcurgem fiecare persoană anul, luna_nastere, zi_nastere = data_nastere[i] # Extragem data de naștere a persoanei # Dacă persoana este mai tânără decât cea mai tânără persoană curentă if (anul, luna_nastere, zi_nastere) > data_tanar: # Actualizăm data celei mai tinere persoane și numărul său de ordine data_tanar = (anul, luna_nastere, zi_nastere) numar_tanar = i + 1 # Dacă persoana este mai în vârstă decât cea mai în vârstă persoană curentă if (anul, luna_nastere, zi_nastere) < data_batran: # Actualizăm data celei mai în vârstă persoane și numărul său de ordine data_batran = (anul, luna_nastere, zi_nastere) numar_batran = i + 1 return numar_tanar, numar_batran
if __name__ == "__main__":
try: n = input("Introduceti numarul de persoane: ") # Citim numărul de persoane de la utilizator date_nastere = [] # Inițializăm lista de date de naștere
# Citim data de naștere a fiecărei persoane de la utilizator for _ in range(int(n)): an, luna, zi = map(int, input("Introduceti data de nastere a persoanei (an luna zi): ").split()) date_nastere.append((an, luna, zi))
# Validăm numărul de persoane și datele de naștere n = validare(int(n), date_nastere) print("Datele introduse corespund restricțiilor impuse.") nr_tanar, nr_batran = persoane(n, date_nastere) print(f"{nr_tanar} {nr_batran}") except ValueError: print("Datele introduse nu corespund restricțiilor impuse.")
</syntaxhighlight>