421. Йо-йо

 

Игрушка йо-йо состоит из катушки, на которую намотана нитка. Если, держа за конец нитки, отпустить катушку, то она будет, вращаясь, сначала опускаться вниз, а затем по инерции подниматься вверх. Но высота, на которую катушка поднимется, будет в k раз меньше, чем высота, с которой она опустилась. Будем считать, что катушка остановилась, если высота её очередного подъема не превышает 1.

Напишите программу, которая по длине нитки l и коэффициенту k подсчитает количество подъемов катушки до остановки. Например, пусть l = 17 и k = 2, тогда катушка будет подниматься на высоты 8.5, 4.25, 2.125, 1.0625, а затем остановится. Таким образом получится 4 подъема.

 

Вход. Два целых числа l (1 ≤ l 109) и k (2 ≤ k ≤ 100).

 

Выход. Выведите одно число – количество подъемов.

 

Пример входа

Пример выхода

17 2

4

 

 

РЕШЕНИЕ

циклы

 

Анализ алгоритма

Промоделируем процесс движения катушки и подсчитаем количество ее подъемов. Пусть l – текущая высота катушки. Она после опускания будет подниматься вверх, только если уровень ее подъема будет больше 1. Если очередной подъем совершится на высоту, не большую 1, то его считать не будем (катушка остановилась).

 

Реализация алгоритма

Читаем входные данные.

 

scanf("%lf %lf",&l,&k);

 

Количество подъемов катушки подсчитываем в переменной res.

 

res = 0;

 

Пусть катушка находится на высоте l. Тогда после опускания она поднимется вверх, если только высота ее подъема будет больше 1 (иначе считаем, что катушка остановилась). Это возможно при выполнении неравенства l / k > 1.

 

while(l / k > 1.0)

{

  l /= k;

  res++;

}

 

Выводим ответ.

 

printf("%d\n",res);   

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    double l = con.nextDouble();

    double k = con.nextDouble();

    int res = 0;

    while(l / k > 1.0)

    {

      l /= k;

      res++;

    }

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

l, k = map(float,input().split())

 

Количество подъемов катушки подсчитываем в переменной res.

 

res = 0

 

Пусть катушка находится на высоте l. Тогда после опускания она поднимется вверх, если только высота ее подъема будет больше 1 (иначе считаем, что катушка остановилась). Это возможно при выполнении неравенства l / k > 1.

 

while l / k > 1:

  l /= k

  res += 1

 

Выводим ответ.

 

print(res)