Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2013, 22:06   #1
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
Лампочка Интересная задача с интересным решением

Здравствуйте, недавно проходил командный турнир по программированию, и я хочу поделиться с вами задачкой, которая заинтересовала меня больше всего, ведь решение её наверняка интересно.

Итак: вкратце условие.
Ване подарили 2 ежедневника на i-тый год, один из которых он использовал. Теперь он думает, когда же этот второй ежедневник пригодится ему, ведь все знают, что календари повторяются. Требуется написать программу, которая по текущему году определяет следующий - тот, в котором подойдет старый календарь.

Там было странное ограничение - текущий год - не более 2011.
Придя домой и проведя небольшое исследование, с помощью календаря, я обнаружил:
Если исходный год високосный, то нужно ждать 28 лет
Если год - первый после високосного, то нужно ждать 6 лет
Если год - второй после високосного, или первый перед високосным, то нужно ждать 11 лет.

Из этого решение выливается самостоятельно - всего лишь несколько развилок.

Однако, как такое решение может прийти во время олимпиады, где был заблокирован системный календарь, а своих мы, разумеется, не принесли, непонятно.

Так вот, друзья, объявляется в розыск простое решение. Как говорит мой товарищ - хочется красоты и преобладает во мне в данный момент спортивный интерес. Чувствуется, что здесь нужно за что-то уцепиться, и задача решится сама собой.
PathTheir вне форума Ответить с цитированием
Старый 15.04.2013, 22:15   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Первоначально идея была такая :
Принимаем что 1-ое января i-го года - понедельник! В каждый не високосный год день недели смещается на одну позицию вправо. В каждый високосный год - на 2 позиции вправо. Теперь запускаем цикл, до тех пор пока снова j-тым днем не окажется понедельник. Как только это произойдет - выводим год!

Идея, должна была пройти (ИМХО), но из-за отсутствия времени реализовать её мы уже не успели..
Poma][a вне форума Ответить с цитированием
Старый 15.04.2013, 22:21   #3
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

Да, эта идея должна была пройти (только что проверил по календарю), но вдруг есть какая-то простая математическая формула, с помощью которой можно решить эту задачу в одну-две строчки.
PathTheir вне форума Ответить с цитированием
Старый 15.04.2013, 22:43   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Формула есть, причем - разные. Но, думаю, именно чтобы их не использовать и стоит ограничение 2011 год.
Потому как Григорианский календарь подразумевает период 400 лет, более точные формулы - вплоть до 10000 лет, а на 2000 год приходится одна из "особенностей" Григорианского календаря.
s-andriano вне форума Ответить с цитированием
Старый 15.04.2013, 22:46   #5
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

То есть в задаче и подразумевался простой перебор?
PathTheir вне форума Ответить с цитированием
Старый 15.04.2013, 22:55   #6
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Это самый простой вариант, учитывая особенности календаря.
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интересная задача 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