1013 - Aniversari
De la Universitas MediaWiki
Cerinţa
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
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
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
- 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
- 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
- Intrare
2 12 7 1990 14 2 2000
- Ieșire
Datele introduse nu corespund restricțiilor impuse.
Rezolvare
# 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.")