Просмотр задания
Укажите количество двузначных натуральных чисел, при вводе которых приведенная ниже программа напечатает число, отличное от 0.
var
i, n: longint;
begin
i := 0;
readln(n);
while (n > 0) do
begin
i := i + n mod 9;
n := n div 9;
end;
writeln(i mod 8);
end.

Впервые вижу такой вид задания, нигде не видел разборов на него, надеюсь вы поможете

Савелий, https://vk.com/3yxpaaa
18 мая 2018
Ответы (3)
Савелий Киреев # 18 мая 2018 в 20:30 0
Заранее спасибо
Именное Фамильное # 19 мая 2018 в 01:24 +1
Т.к. у нас ищутся остатки от деления на 9, да и само число делится нацело на 9, нужно рассматривать числа в 9-тиричной СС, в выводе у нас выводится остаток от деления на 8. Т.к. вывод должен быть ненулевой(по условию), то задача сводится к тому, чтобы найти в 9-тиричной СС сумму цифр, а потом определить кратна ли 8 или нет эта сумма(сумма считается в десятичной).
Т.к. СС 9-тичная, то нам подходят числа от 11(в 9-тичной) до 120(в 9-тичной)
Мы можем составить только такие остатки, кратные 16: 0, 8, 16.
Рассмотрим случаи:
0: мы никак не можем получить, т.к. у нас даже в 100 остаток будет 1
16: т.к. СС 9-тичная, то 16 получится только в 8+8, то есть это происходит в единственном числе- 88 (в 9-тичной)
8: сумму цифр 8 мы получаем в этих числах(в девятичной СС): 17, 26, 35, 44, 53, 62, 71, 80, 107, 116
Итого смотрим, сколько у нас таких чисел- 11. Именно в этих в выводе будет 0
В промежуток от 10 до 99 входит 99-10+1=90 чисел. Значит, ненулевой ответ будет выдваться в 90-11=79 числах.
Савелий Киреев # 19 мая 2018 в 08:58 0
Огромное вам спасибо
Перевести число из в Результат: 510 = 1012