|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
15.04.2013, 22:06 | #1 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 62
|
Интересная задача с интересным решением
Здравствуйте, недавно проходил командный турнир по программированию, и я хочу поделиться с вами задачкой, которая заинтересовала меня больше всего, ведь решение её наверняка интересно.
Итак: вкратце условие. Ване подарили 2 ежедневника на i-тый год, один из которых он использовал. Теперь он думает, когда же этот второй ежедневник пригодится ему, ведь все знают, что календари повторяются. Требуется написать программу, которая по текущему году определяет следующий - тот, в котором подойдет старый календарь. Там было странное ограничение - текущий год - не более 2011. Придя домой и проведя небольшое исследование, с помощью календаря, я обнаружил: Если исходный год високосный, то нужно ждать 28 лет Если год - первый после високосного, то нужно ждать 6 лет Если год - второй после високосного, или первый перед високосным, то нужно ждать 11 лет. Из этого решение выливается самостоятельно - всего лишь несколько развилок. Однако, как такое решение может прийти во время олимпиады, где был заблокирован системный календарь, а своих мы, разумеется, не принесли, непонятно. Так вот, друзья, объявляется в розыск простое решение. Как говорит мой товарищ - хочется красоты и преобладает во мне в данный момент спортивный интерес. Чувствуется, что здесь нужно за что-то уцепиться, и задача решится сама собой. |
15.04.2013, 22:15 | #2 |
Новичок
Джуниор
Регистрация: 11.10.2011
Сообщений: 3,882
|
Первоначально идея была такая :
Принимаем что 1-ое января i-го года - понедельник! В каждый не високосный год день недели смещается на одну позицию вправо. В каждый високосный год - на 2 позиции вправо. Теперь запускаем цикл, до тех пор пока снова j-тым днем не окажется понедельник. Как только это произойдет - выводим год! Идея, должна была пройти (ИМХО), но из-за отсутствия времени реализовать её мы уже не успели.. |
15.04.2013, 22:21 | #3 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 62
|
Да, эта идея должна была пройти (только что проверил по календарю), но вдруг есть какая-то простая математическая формула, с помощью которой можно решить эту задачу в одну-две строчки.
|
15.04.2013, 22:43 | #4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Формула есть, причем - разные. Но, думаю, именно чтобы их не использовать и стоит ограничение 2011 год.
Потому как Григорианский календарь подразумевает период 400 лет, более точные формулы - вплоть до 10000 лет, а на 2000 год приходится одна из "особенностей" Григорианского календаря. |
15.04.2013, 22:46 | #5 |
Пользователь
Регистрация: 14.04.2013
Сообщений: 62
|
То есть в задаче и подразумевался простой перебор?
|
15.04.2013, 22:55 | #6 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Это самый простой вариант, учитывая особенности календаря.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Интересная задача | makskovalko | Помощь студентам | 5 | 22.02.2013 22:11 |
Интересная задача | Артем123 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 08.06.2011 01:12 |
Интересная задача | rick1177 | Microsoft Office Excel | 13 | 18.05.2011 22:00 |
интересная задача | Знаменок | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 05.10.2010 13:26 |