Для решения задачи определения самого молодого сотрудника с ближайшим днем рождения можно использовать следующий алгоритм:
1. **Считывание текущей даты**: Программа должна принимать текущую дату в формате `DD.MM.YYYY` и преобразовывать её в объект `datetime`.
2. **Считывание данных о сотрудниках**: Программа должна считывать данные о количестве сотрудников и для каждого из них считывать имя, фамилию и дату рождения.
3. **Преобразование дат рождения**: Программа должна преобразовать даты рождения сотрудников в объект `datetime`. При этом игнорируется год, так как нужно сравнивать только день и месяц.
4. **Определение ближайших дней рождения**: Программа должна вычислить ближайшие семь дней от текущей даты и проверить, попадают ли дни рождения сотрудников в этот диапазон.
5. **Поиск самого молодого сотрудника**: Из всех сотрудников, чьи дни рождения попадают в ближайшие семь дней, нужно найти самого молодого (т.е., у кого ближайший день рождения).
6. **Вывод результата**: Если сотрудник с ближайшим днем рождения найден, выводится его имя и фамилия, в противном случае выводится сообщение "Дни рождения не планируются".
Вот пример реализации программы на Python:
```python
from datetime import datetime, timedelta
def find_youngest_employee(current_date_str, num_employees, employees_data):
current_date = datetime.strptime(current_date_str, "%d.%m.%Y")
# Определяем ближайшие 7 дней
upcoming_birthdays = []
for day_offset in range(7):
date_to_check = current_date + timedelta(days=day_offset)
upcoming_birthdays.append((date_to_check.month, date_to_check.day))
youngest_employee = None
min_days_to_birth = float('inf')
for employee in employees_data:
name, surname, birthday_str = employee
birthday = datetime.strptime(birthday_str, "%d.%m.%Y")
# Игнорируем год рождения
birth_month_day = (birthday.month, birthday.day)
# Проверяем, попадает ли день рождения в ближайшие 7 дней
if birth_month_day in upcoming_birthdays:
# Считаем, сколько дней осталось до дня рождения
days_to_birth = (birthday.replace(year=current_date.year) - current_date).days
if days_to_birth < 0:
# Если день рождения уже прошел в этом году
days_to_birth += 365
# Проверяем, такой ли это самый молодой
if days_to_birth < min_days_to_birth:
min_days_to_birth = days_to_birth
youngest_employee = (name, surname)
if youngest_employee:
return f"{youngest_employee[0]} {youngest_employee[1]}"
else:
return "Дни рождения не планируются"
# Пример ввода
current_date = "15.03.2023"
num_employees = 3
employees = [
("Ivan", "Petrov", "18.03.1990"),
("Anna", "Sidorova", "15.03.1995"),
("Max", "Ivanov", "20.03.1992")
]
# Вызов функции
result = find_youngest_employee(current_date, num_employees, employees)
print(result)
```
### Пояснения к коду:
- Функция `find_youngest_employee` принимает текущую дату, количество сотрудников и список данных о сотрудниках.
- Текущая дата преобразуется в объект `datetime`, и создается список `upcoming_birthdays` с ближайшими днями.
- Далее идет проверка для каждого сотрудника на совпадение дня рождения с ближайшими днями.
- Если находим подходящего сотрудника, сравниваем, является ли он самым молодым, и сохраняем его данные.
- В конце возвращается соответствующий результат.