Редакция для Високосный год


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Автор: montes332

1. Идея

Нужно проверить, является ли год y високосным по заданному правилу.

Правило состоит из двух частей:

  • год високосный, если делится на 4, но не делится на 100;
  • или если делится на 400.

Значит, задача сводится к одной логической проверке с остатками от деления.

2. Наблюдения

Разберём правило подробнее.

  • Если год не делится на 4, он точно не високосный.
  • Если год делится на 4, то он может быть високосным.
  • Но годы, которые делятся на 100, обычно уже не считаются високосными.
  • Исключение: если год делится на 400, то он всё-таки високосный.

Примеры:

  • 4 делится на 4, не делится на 100YES
  • 100 делится на 4 и на 100, но не делится на 400NO
  • 400 делится на 400YES

Итоговое условие можно записать так:

  • (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0)

3. Алгоритм

  1. Считать число y.
  2. Проверить условие:
    • если (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0), вывести YES;
    • иначе вывести NO.

4. Почему это работает

Алгоритм напрямую повторяет определение високосного года из условия.

Он считает год високосным в двух случаях:

  • год делится на 4, но не делится на 100;
  • год делится на 400.

Если ни одно из этих условий не выполняется, то по правилу из задачи год не является високосным.

Значит, программа всегда выводит правильный ответ.

5. Сложность

Выполняется несколько арифметических операций и одна логическая проверка.

  • Время: O(1)
  • Память: O(1)

6. Код на C++17

#include <iostream>
using namespace std;

int main() {
    long long y;
    cin >> y;

    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
        cout << "YES\n";
    } else {
        cout << "NO\n";
    }

    return 0;
}

7. Код на Python 3

y = int(input())

if (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0):
    print("YES")
else:
    print("NO")

Комментарии

Еще нет ни одного комментария.