Задача A. - "Центр образования "Эврика"

advertisement
«Первые шаги» 2015
Командный турнир
по программированию
КГБОУ «Центр образования «Эврика»
Задача A. k-я секунда суток
Идея решения.
Смоделируем битву!
Задача A. k-я секунда суток
Задача на целочисленное деление.
Вычислим количество секунд в полных сутках:
24 * 60 *60 = 86400. По ограничениям задачи ясно,
что с начала отсчета прошло менее суток.
В одном часе 60 * 60 = 3600 секунд, значит с
начала отсчета прошло k // 3600 часов.
С начала нового часа прошло k % 3600 секунд.
Тогда полных минут прошло (k % 3600) // 60 минут.
Задача A. k-я секунда суток
var
n:longint;
begin
readln(n);
writeln ('It is ',n div 3600,'
hours ',(n mod 3600) div 60,'
minutes.');
end.
Задача B. Электропоезд
Идея решения.
Смоделируем битву!
Задача B. Электропоезд
Заведем массив для хранения времени
отправления поезда с каждой станции.
Заполним его значениями, проверяя, не
перешли ли мы на новые сутки.
Задача B. Электропоезд
hours, minutes = map(int, input().split(':'))
initial = hours * 60 + minutes
n = int(input())
leaving_time = [0] * n
leaving_time[0] = initial
curr = initial
t = [None] + list(map(int, input().split()))
for i in range(1, n):
curr += t[i]
if curr >= 1440:
curr = curr - 1440
leaving_time[i] = curr
for t in leaving_time:
print((t // 60) // 10, (t // 60) % 10, ':', (t % 60) //
10, (t % 60) % 10, sep='')
Задача C. Электронные часы
Задача C. Электронные часы
Пробежимся от первого момента времени до
второго, проверяя совпадение часов и минут.
Задача C. Электронные часы
var
h1, m1, h2, m2, count, t1, t2, t: integer;
begin
readln(h1, m1, h2, m2);
t1 := h1 * 60 + m1;
t2 := h2 * 60 + m2;
if t2 < t1 then t2 += 1440;
count := 0;
for t := t1 to t2 do
if (t div 60) mod 24 = (t mod 60) then count += 1;
writeln(count);
end.
Задача D. Праздники
Задача D. Праздники
Наибольшее количество праздников получится, если
невисокосный год начинается с субботы. В этом случае
мы сразу получаем 2 выходных дня.
По формуле 7*(k div 5) найдем количество полных
праздничных недель.
По формуле k mod 5 найдем количество оставшихся
праздничных дней, не «заполнивших» полностью
неделю.
Осталось рассмотреть случаи, когда мы добрались до 23
февраля (54 день года, достигается при к = 36) или до 8
марта (67 день года, достигается при к = 45).
Задача D. Праздники
var
k, res: longint;
begin
readln(k);
res:=2 + 7*(k div 5) + (k mod 5);
if k>36 then inc(res);
If k>44 then inc(res);
if (k=39) or (k=44) or (k=48) or
(k=49) then inc(res, 2);
writeln(res);
end.
Задача E. Ежедневник
Задача E. Ежедневник
Будем перебирать года по порядку, начиная со
следующего. Невисокосный год отличается от
предыдущего года на 1 день, високосный – на
два. Как только разница в днях (точнее, ее
остаток при делении на 7) станет равна нулю –
год подходит. Но нужно еще проверить,
являются ли текущий год таким же високосным
или невисокосным, как данный.
Задача E. Ежедневник
def IsLeapYear(n):
return (n % 4 == 0 and n % 100 != 0) or n % 400 == 0
StartYear = int(input())
DayDiffer = 0
CurrentYear = StartYear
while DayDiffer % 7 != 0 or IsLeapYear(CurrentYear) !=
IsLeapYear(StartYear) or DayDiffer == 0:
CurrentYear = CurrentYear + 1
if IsLeapYear(CurrentYear):
DayDiffer += 2
else:
DayDiffer += 1
print(CurrentYear)
Спасибо за внимание!
Download