Последовательность дней недели периодична с периодом 7, поэтому номер дня недели можно найти, взяв остаток от деления: (номер дня недели первого числа + сколько Такое решение будет давать верный ответ для всех дней недели кроме воскресенья: для воскресений будет выведен ноль (а не 7). Решить это можно, перенумеровав все номера дней недели с нуля, а не с единицы.
m - 1 – номер дня недели первого числа месяца (считая с 0)
n - 1 – пройдёт от первого числа
(m + n - 2) mod 7 – номер нужного дня недели (считая с 0)
(m + n - 2) mod 7 + 1 – ответ.
Программа (PascalABC.NET):
begin
var n := ReadInteger;
var m := ReadInteger;
print((m + n - 2) mod 7 + 1)
end.
Пример ввода:
7
7
Пример вывода:
6
(Действительно, 1 апреля 2018 года – воскресенье, а сегодня, 7 апреля – суббота)
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
type fs=(string,string);
begin var L:=new List<fs>; repeat var aw:=ReadlnString('>').ToWords; if aw.Length=0 then break; L.Add((aw[1],aw[0])) until false; var a:=L.OrderBy(t->t[0]); var i:=1; foreach var x in a do begin Writeln(i:4,' ',x[1],' ',x[0]); i+=1 end end.
Пример > J.X. Smith > B.A. Weiter > A.C. Johnes > 1 A.C. Johnes 2 J.X. Smith 3 B.A. Weiter
Объяснение:
Последовательность дней недели периодична с периодом 7, поэтому номер дня недели можно найти, взяв остаток от деления: (номер дня недели первого числа + сколько Такое решение будет давать верный ответ для всех дней недели кроме воскресенья: для воскресений будет выведен ноль (а не 7). Решить это можно, перенумеровав все номера дней недели с нуля, а не с единицы.
m - 1 – номер дня недели первого числа месяца (считая с 0)
n - 1 – пройдёт от первого числа
(m + n - 2) mod 7 – номер нужного дня недели (считая с 0)
(m + n - 2) mod 7 + 1 – ответ.
Программа (PascalABC.NET):
begin
var n := ReadInteger;
var m := ReadInteger;
print((m + n - 2) mod 7 + 1)
end.
Пример ввода:
7
7
Пример вывода:
6
(Действительно, 1 апреля 2018 года – воскресенье, а сегодня, 7 апреля – суббота)
// Внимание! Если программа не работает, обновите версию!
type
fs=(string,string);
begin
var L:=new List<fs>;
repeat
var aw:=ReadlnString('>').ToWords;
if aw.Length=0 then break;
L.Add((aw[1],aw[0]))
until false;
var a:=L.OrderBy(t->t[0]);
var i:=1;
foreach var x in a do begin
Writeln(i:4,' ',x[1],' ',x[0]);
i+=1
end
end.
Пример
> J.X. Smith
> B.A. Weiter
> A.C. Johnes
>
1 A.C. Johnes
2 J.X. Smith
3 B.A. Weiter