Есть ответ 👍

Ряд состоит из натуральных чисел от 1 до n. задается натуральное число k и выполняется один или несколько шагов по удалению каждого k-ого числа в этом ряду. на очередном шаге оставшиеся числа просматриваются в возрастающем порядке, и каждое k-е число удаляется. если после очередного шага осталось меньше k чисел, то процесс удаления чисел завершается. необходимо определить, на каком шаге будет удалено число n, или выяснить, что оно не будет удалено до завершения процесса. например, пусть n = 13, k = 2. • на первом шаге будут удалены числа 2, 4, 6, 8, 10 и 12, останутся числа 1, 3, 5, 7, 9, 11 и 13. • на втором шаге будут удалены числа 3, 7 и 11, останутся числа 1, 5, 9 и 13. • на третьем шаге будут удалены числа 5 и 13, останутся числа 1 и 9. • на четвертом шаге будет удалено число 9, останется число 1. поскольку осталось одно число, процесс завершается. таким образом, число 13 будет удалено на третьем шаге. требуется написать программу, которая по заданным числам n и k определяет, на каком шаге будет удалено число n. формат ввода первая строка входных данных содержит целое число n (3 ≤ n ≤ 10**18). вторая строка входных данных содержит целое число k (2 ≤ k ≤ 100, k < n). формат вывода требуется вывести одно целое число — номер шага, на котором будет удалено число n, или число 0, если число nне будет удалено. пример 1 ввод вывод 13 2 3 пример 2 ввод вывод 3 2 2

172
420
Посмотреть ответы 2

Ответы на вопрос:


для того, чтобы в последовательности из 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 2 3

вводить данные можно как через пробел, так и построчно


ответ 36 кбайт

я тебе в комментах в прошлом вопросе скинул

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS