Задание по олимпиаде по информатике 5 класс СРОЧНО!!!
Перед вами алгоритм некоторой программы, написанный на некотором алгоритмическом языке программирования. Какое число n было введено, если программа вывела число 66.
a mod b – взятие остатка от деления числа a на число b.
a div b – целая часть деления числа a на число b.
a := b – операция присваивания

Составим программу поиска нужного числа n на PascalABC:
var a, b, c : integer;
begin
for var n := 0 to 99 do
begin
a := n mod 10;
b := n div 10;
if (a mod 2 = 0) then a := a+1 else a := a-1;
if (b mod 2 = 0) then b := b-1 else b := b+1;
c := 10*a + b;
if (c=66) then WriteLn (' n = ', n:3);
end;
end.
Результат поиска:
n = 57

Для решения этой задачи нам необходимо понять, как входное значение n через представленное преобразование превратится в выходное значение 66.
Мы можем выполнить шаги алгоритма обратно, чтобы найти n:
Поскольку результатом алгоритма является число 66, обозначим цифры числа как a*10 + b.
Исходя из распечатанной программой цифр, a должно было быть цифрой десятков, которая после увеличения или уменьшения стала 6, а b должно было быть цифрой единиц, которая после уменьшения или увеличения стала 6.
Определим возможные значения для a и b до изменений:
Если a после изменения стала 6, то до изменения она могла быть либо 5 (если число было нечетным и к нему прибавлялась 1), либо 7 (если число было четным и из него вычиталась 1).
Так же, если b после изменения стала 6, то до изменения она могла быть либо 5 (если число было четным и из него вычиталась 1), либо 7 (если число было нечетным и к нему прибавлялась 1).
Теперь мы имеем четыре возможных комбинации для a и b до изменений:
a = 5, b = 5
a = 5, b = 7
a = 7, b = 5
a = 7, b = 7
Но нам нужны значения, для которых a четно после преобразования и b нечетно, или a нечетно и b четно. Это означает, что возможны только две комбинации:
a = 5 (было нечетным, стало четным), b = 7 (было нечетным, стало четным)
a = 7 (было четным, стало нечетным), b = 5 (было четным, стало нечетным)
Тогда:
Если a было 5, b должно было быть 7, а n равнялось 5*10 + 7 = 57.
Если a было 7, b должно было быть 5, а n равнялось 7*10 + 5 = 75.
Теперь проверим каждое из этих значений:
Для n = 57:
a := 57 mod 10 будет равно 7.
b := 57 div 10 будет равно 5.
a (7) нечетно, значит делаем a := a - 1, отсюда a становится 6.
b (5) нечетно, значит делаем b := b + 1, отсюда b становится 6.
В итоге получаем a*10 + b = 6*10 + 6 = 66, что соответствует нужному результату. Следовательно, n было равно 57.
57