Школы

Почему ответ 1011, а не 1001, ведь (x mod 1000) равен 11

Ниже на пяти языках записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа a и b. Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 2, а потом 11.

var x, a, b: integer;
begin
readln(x);
a := 0; b := 1;
while x > 0 do
begin
a := a+1;
b := b*(x mod 1000);
x := x div 1000;
end;
writeln(a); write(b);
end.
Рахим.
Ключевым понятием данной задачи является группа из трёх цифр, стоящих вместе, — триада цифр.

Запись введённого числа x можно разделить на триады цифр. Группирование производится справа налево (от младших цифр к старшим). Если количество цифр в записи числа не кратно трём, это нормально.

• Переменная a — счётчик триад в записи числа x.
• Операция x mod 1000 определяет значение самой младшей триады в числе x.
  Таким образом строка b := b*(x mod 1000); умножает значение b на значение младшей триады.
• Строка x := x div 1000; фактически отсекает от записи числа x младшую триаду.
• Цикличность выполнения строк
  b := b*(x mod 1000);
  x := x div 1000;
  формирует в переменной b произведение значений всех триад из записи числа x, включая неполную триаду (самую старшую).

Таким образом, если a = 2, b = 11, то в записи введённого числа ровно 2 триады, а произведение их значений равно 11.

✓✓✓ ВАЖНОЕ ЗАМЕЧАНИЕ!!! Число 11 является простым, то есть оно делится исключительно на 1 и на 11.

Из этого следует, что существует только 2 числа, записи которых удовлетворяют условиям задачи: 1011 и 11001.

Каждое из этих чисел делится на 2 триады цифр, причём старшая триада — неполная.

   ⟨1011⟩ <==> ⟨001⟩ + ⟨011⟩
   ⟨11001⟩ <==> ⟨011⟩ + ⟨001⟩

Меньшее из этих чисел есть 1011.

✓ РЕШЕНИЕ ЗАКОНЧЕННОЕ.
__ 0Bruchennye__
__ 0Bruchennye__
16 172
Лучший ответ