
Даны дата рождения человека и сегодняшняя дата. Требуется определить, исполнилось ли человеку 16
лет. Формат входных данных В первой строке входного файла записана дата рождения человека, во второй — сегодняшняя дата. Каждая дата представляет собой три целых числа: D, M и Y — день, месяц и год соответственно. Гарантируется, что тройки чисел задают корректную дату календаря, а сами даты лежат между 1 января 1900 года и 31 декабря 2050 года. написать на c++

Ответы на вопрос

Алгоритм решения
Для начала давай посмотрим на года.
1. Если разница между годом рождения и текущим годом больше 16, мы однозначно можем сказать, что человеку уже есть 16.
2. Если разница между годом рождения и текущим годом меньше 16, мы однозначно можем сказать, что человеку ещё нет 16.
Если разница между годом рождения и текущим годом равна 16, мы можем сказать, что у человека день рождения в этом году. Давай глянем на месяц.
1. Если текущий месяц больше месяца рождения, человеку уже есть 16.
2. Если текущий месяц меньше месяца рождения, человеку ещё нет 16.
Если у человека день рождения в этом месяце, давай точно так же глянем на дни.
В итоге мы уже точно знаем, когда у человека день рождения.
Код решения
#include <bits/stdc++.h>
using namespace std;
int main() {
int d1, m1, y1, d2, m2, y2;
cin >> d1 >> m1 >> y1 >> d2 >> m2 >> y2;
if (y2 - y1 > 16) {
cout << "YES" << endl;
return 0;
} else if (y2 - y1 < 16) {
cout << "NO" << endl;
return 0;
}
if (m2 > m1) {
cout << "YES" << endl;
return 0;
} else if (m2 < m1) {
cout << "NO" << endl;
return 0;
}
if (d2 < d1) {
cout << "NO" << endl;
return 0;
}
cout << "YES" << endl;
return 0;
}
Файл решения прикреплён.




Для решения этой задачи на C++, вы можете использовать следующий код:
cpp#include <iostream>
using namespace std;
struct Date {
int day;
int month;
int year;
};
bool isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
bool isValidDate(const Date& date) {
if (date.year < 1900 || date.year > 2050 || date.month < 1 || date.month > 12 || date.day < 1)
return false;
static const int daysInMonth[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = daysInMonth[date.month];
if (date.month == 2 && isLeapYear(date.year))
days++;
return date.day <= days;
}
bool hasPassed16Years(const Date& birthdate, const Date& currentDate) {
if (currentDate.year - birthdate.year > 16)
return true;
if (currentDate.year - birthdate.year < 16)
return false;
if (currentDate.month > birthdate.month)
return true;
if (currentDate.month < birthdate.month)
return false;
return currentDate.day >= birthdate.day;
}
int main() {
Date birthdate, currentDate;
// Ввод даты рождения
cin >> birthdate.day >> birthdate.month >> birthdate.year;
// Ввод сегодняшней даты
cin >> currentDate.day >> currentDate.month >> currentDate.year;
if (!isValidDate(birthdate) || !isValidDate(currentDate)) {
cout << "Invalid input date." << endl;
return 1;
}
if (hasPassed16Years(birthdate, currentDate)) {
cout << "Person has turned 16 years old." << endl;
} else {
cout << "Person has not turned 16 years old yet." << endl;
}
return 0;
}
Этот код определит, исполнилось ли человеку 16 лет на сегодняшнюю дату, и выдаст соответствующее сообщение.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili