Допустим, мы ведем счет дней недели с воскресенья и присваиваем дням такие номера: 0- Вс, 1- Пн, 2- Вт, 3- Ср, 4- Чт, 5- Пт, 6- Сб. Определим, когда в январе было первое Вс. Если 31 был Пн, то 4 недели назад, т.е. 31-28=3 числа тоже был Пн. А Вс было перед Пн, т.е. 2 января. Числа от 0 до 6 - это остатки целочисленного деления на 7. Получается, что остаток деления числа 2 на 7, должен привести нас к нулю. А он равен двум. Идея: вычтем из остатка 2, чтобы получился ноль. Идея хороша для остатка 2, 3, 4, 5, и 6. Она даст нам значения 0, 1, 2, 3 и 4. А вот для остатков 0 и 1, она даст -2 и -1, что нехорошо. Внесем корректировку. если получилось отрицательное значение, увеличим его на 7. Проверим ,будет ли это работать. 1 января - Сб (номер дня 6) алгоритм дает 1-2 = -1 и +7 = 6 - верно 2 января - Вс (номер дня 0) алгоритм дает 2-2 = 0 - верно 3 января - Пн (номер дня 1) алгоритм дает 3-2 = 1 - верно 4 января - Вт (номер дня 2) алгоритм дает 4-2 = 2 - верно 5 января - Ср (номер дня 3) алгоритм дает 5-2 - 3 - верно 6 января - Чт (номер дня 4) алгоритм дает 6-2 = 4 - верно 7 января - Пт (номер дня 5) алгоритм дает 0-2 = -2 и +7 = 5 - верно 8 января - Сб (номер дня 6) алгоритм дает 1-2 = -1 и +7 = 6 - верно 9 января - Вс (номер дня 0) алгоритм дает 2-2 = 0 - верно
Все работает.
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var chislo:=ReadInteger('Номер дня в январе 2011 года:'); chislo:=chislo mod 7-2; if chislo<0 then chislo:=chislo+7; var y:string; case chislo of 0:y:='Воскресенье'; 1:y:='Понедельник'; 2:y:='Вторник'; 3:y:='Среда'; 4:y:='Четверг'; 5:y:='Пятница'; 6:y:='Суббота' end; Writeln('Это ',y) end.
Примеры Номер дня в январе 2011 года: 31 Это Понедельник
0- Вс, 1- Пн, 2- Вт, 3- Ср, 4- Чт, 5- Пт, 6- Сб.
Определим, когда в январе было первое Вс.
Если 31 был Пн, то 4 недели назад, т.е. 31-28=3 числа тоже был Пн.
А Вс было перед Пн, т.е. 2 января.
Числа от 0 до 6 - это остатки целочисленного деления на 7.
Получается, что остаток деления числа 2 на 7, должен привести нас к нулю. А он равен двум.
Идея: вычтем из остатка 2, чтобы получился ноль.
Идея хороша для остатка 2, 3, 4, 5, и 6. Она даст нам значения 0, 1, 2, 3 и 4. А вот для остатков 0 и 1, она даст -2 и -1, что нехорошо.
Внесем корректировку. если получилось отрицательное значение, увеличим его на 7.
Проверим ,будет ли это работать.
1 января - Сб (номер дня 6) алгоритм дает 1-2 = -1 и +7 = 6 - верно
2 января - Вс (номер дня 0) алгоритм дает 2-2 = 0 - верно
3 января - Пн (номер дня 1) алгоритм дает 3-2 = 1 - верно
4 января - Вт (номер дня 2) алгоритм дает 4-2 = 2 - верно
5 января - Ср (номер дня 3) алгоритм дает 5-2 - 3 - верно
6 января - Чт (номер дня 4) алгоритм дает 6-2 = 4 - верно
7 января - Пт (номер дня 5) алгоритм дает 0-2 = -2 и +7 = 5 - верно
8 января - Сб (номер дня 6) алгоритм дает 1-2 = -1 и +7 = 6 - верно
9 января - Вс (номер дня 0) алгоритм дает 2-2 = 0 - верно
Все работает.
// PascalABC.NET 3.3, сборка 1625 от 17.01.2018
// Внимание! Если программа не работает, обновите версию!
begin
var chislo:=ReadInteger('Номер дня в январе 2011 года:');
chislo:=chislo mod 7-2;
if chislo<0 then chislo:=chislo+7;
var y:string;
case chislo of
0:y:='Воскресенье';
1:y:='Понедельник';
2:y:='Вторник';
3:y:='Среда';
4:y:='Четверг';
5:y:='Пятница';
6:y:='Суббота'
end;
Writeln('Это ',y)
end.
Примеры
Номер дня в январе 2011 года: 31
Это Понедельник
Номер дня в январе 2011 года: 13
Это Четверг
Номер дня в январе 2011 года: 23
Это Воскресенье
Объяснение:
Никогда такое не решал, но попробую
На выходе F=1
Идем с конца
До него & (конъюнктор) - это логическое AND
По таблице истинности находим, что На выходе 1, только если на входе 1 и 1, значит А=1
Теперь идем от А. Сначала инверсия, получаем 0
Далее 0 AND B и мы должны получить 1. И тут у меня ломается мозг.
0 AND что угодно - получим 0, а если так, то и F=0 станет.
Вот и логическая бомба.
Решения не вижу у этой задачи, если F=1
Еще функцию надо
F=(A)AND((NOT(A))AND(B))
1=1AND1, значит A=1 и
(NOT(A))AND(B)=1
тогда B=1 и NOT(A)=1.
но NOT(A)=1 и А=1 не может быть. Мы пришли к противоречию.
Утерян "лучший ответ". Нашедшему вернуть.