Дистанционная подготовка: если посмотреть с другои точки зрения то задю неправильная
если посмотреть с другои точки зрения то задю неправильная
от ----- ----- - Среда 19 Ноябрь 2014, 21:05
253. Високосный  год
  а с какого перепугу 1900 не является високосным? Високосный год наступает каждые 4 года, т.е. если на 4 делится — это високосный год. И больше не надо никаких делений на 100 или 400.

Вопросы задавать это нормально, а вот прежде чем утверждать что-то изучите матчасть. Земля делает оборот вокруг солнца за 365 суток 5 часов 48 минут 46 секунд. Как видите остаток не ровно 6 часов, а на 11 минут 14 секунд меньше. Это значит, что делая високосный год мы прибавляем лишнее время. Где-то за 128 лет накапливаются лишние сутки. Поэтому каждые 128 лет в одном из 4-х летних циклов високосный год делать не надо, чтобы избавиться от этих лишних суток. Но чтобы упростить, високосным не делают каждый 100-й год. Идея понятна? Хорошо. А как же тогда быть дальше, ведь лишний день прибавляется каждые 128 лет, а урезаем его каждые 100 лет? Да, мы отрезаем больше положенного, и это нужно когда-то вернуть.

Если первый абзац понятен и все еще интересно, тогда читаем дальше, но будет сложнее.

Итак за 100 лет набегает 100/128=25/32 суток лишнего времени (это 18 часов 45 минут). Мы не делаем високосный год, то есть отнимаем одни сутки: получаем 25/32-32/32=-7/32 суток (это 5 часов 15 минут), то есть отнимаем лишнее. Через четыре цикла по 100 лет (через 400 лет) мы отнимем лишнего 4*(-7/32)=-28/32 суток (это минус 21 час). На 400-й год мы делаем високосный год, то есть прибавляем сутки (24 часа): -28/32+32/32=4/32=1/8 (это 3 часа).
Мы делаем каждый 4 год високосным, но при этом каждый 100 год не високосным и при этом каждый 400 год високосным, но все равно каждые 400 лет прибавляются лишние 3 часа. Через 8 циклов по 400 лет, то есть через 3200 лет накопится лишних 24 часа, то есть одни сутки. Тогда добавляется еще одно обязательное условие: каждые 3200-й год не должен быть високосным. 3200 лет можно округлить до 4000, но тогда опять придется играться с добавленными или урезанными сутками.
3200 лет не прошло, так что об этом условии, если его таким сделают, еще не говорят. А вот 400 со дня утверждения Григорианского календаря лет уже прошло.
Года кратные 400 всегда високосные (пока что на сегодняшний день), остальные года кратные 100 не високосные, остальные года кратные 4 високосные.

Приведенный мною расчет показывает что при нынешнем состоянии ошибка в одни сутки накопиться за 3200 лет, но вот что об этом пишет википедия:
«Ошибка в одни сутки по сравнению с годом равноденствий в григорианском календаре накопится примерно за 10 000 лет (в юлианском — примерно за 128 лет). Часто встречающаяся оценка, приводящая к величине порядка 3000 лет, получается, если не учитывать, что со временем изменяется количество суток в тропическом году и, кроме того, изменяется соотношение между продолжительностями времён года». Из той же википедии формула продолжительности года в сутках с дробями неплохо обрисовывает картину:

365,2425=365+0,25-0,01+0,0025=265+1/4-1/100+1/400

Год 1900 високосным не был, а 2000 был, причем особенный, потому что такой високосный бывает раз в 400 лет.
Re: если посмотреть с другои точки зрения то задю неправильная
от Peter Cherepanov - Среда 19 Ноябрь 2014, 21:51
  Високосность -- это свойство календаря. Для этой задачи совершенно неважно, как календарь соотносится с реальностью.

Вы неверно запрограммировали несложный алгоритм, который даже дан в условии задачи.
Выражение x == 1 || x == 2 не эквивалентно x == 1 || 2 или x == (1 || 2) . Пожалуйста, разберитесь с вычислением выражений в C.

(В сторону) Слава Аллаху, у нас тут нет задач на теорию относительности. А то бы, кто-нибудь ее опровергал каждый месяц.