Для того, чтобы в последовательности из n элементов удалить последний путем вычеркивания каждого k-го элемента, n должно быть кратно k - это и есть условие успешного удаления. Запишем его в виде n mod k = 0, где mod - операция получения остатка целочисленного деления n на k.
Если n не кратно k, то будут вычеркнуты [n / k] элементов последовательности. Здесь [ ] - обозначение операция взятия целой части числа (антье), введенное в математику К. Гауссом.
После вычеркивания [n / k] элементов, в последовательности останется n₁ = n - [n / k] элементов. Если повторять этот процесс, то либо на шаге m будет вычеркнут последний элемент, либо количество элементов станет меньше k.
Рассмотрим приведенный в задании пример.
n=13, k=2
n mod k ≠ 0, поэтому полагаем n₁ = n - [n / k] = 13 - [13 / 2] = 13 - 6 = 7
n₁ mod k ≠ 0, поэтому полагаем n₂ = n₁ - [n₁ / k] = 7 - [7 / 2] = 7 - 3 = 4
n₂ mod k = 0, следовательно на третьем шаге вычеркивания мы получим нужный результат.
PascalABC.NET 3.4.2, сборка 1884 от 24.11.2018Внимание! Если программа не работает, обновите версию!begin
var (n, k) := ReadInteger2;
var m := 0;
while n >= k do
begin
if n mod k = 0 then
begin
Print(m + 1);
exit
end
else
begin
n := n - n div k;
Inc(m)
end
end;
Print(0)
end.
Пример13 23Вводить данные можно как через пробел, так и построчно
11010000 10011000 11010000 10111101 11010001 10000100 11010000 10111110 11010001 10000000 11010000 10111100 11010000 10110000 11010001 10000110 11010000 10111000 11010001 10001111 00001101 00001010 11010000 10011010 11010000 10111000 11010001 10000001 11010000 10111011 11010000 10111110 11010001 10000000 11010000 10111110 11010000 10110100 00100000 11010001 10000001 11010000 10111110 11010000 10110010 11010001 10000000 11010000 10110101 11010000 10111100 11010000 10110101 11010000 10111101 11010000 10111101 11010000 10111110 11010000 10110011 11010000 10111110 00100000 11010000 10111100 11010000 10111000 11010001 10000000 11010000 10110000