У Василия есть число a, которое он хочет превратить в число b. Для этого он может проИзводить два типа операций: умножить имеющееся у него число на 2 (то есть заменить число x числом 2·x); приписать к имеющемуся у него числу цифру 1 справа (то есть заменить число x числом 10·x + 1). Вам надо помочь Василию получить из числа a число b с помощью описанных операций, либо сообщить, что это невозможно. Обратите внимание, что в этой задаче не требуется минимизировать количество операций. Достаточно найти любой из способов получить из числа a число b. Входные данные В первой строке записаны два целых положительных числа a и b (1 ≤ a < b ≤ 109) — число, которое есть у Василия, и число, которое он хочет получить. Выходные данные Если получить число b из числа a невозможно, выведите «NO» (без кавычек). В противном случае в первую строку выведите «YES» (без кавычек). Во вторую строку выведите число k — количество чисел в последовательности превращений. В третьей строке выведите последовательность превращений x1, x2, ..., xk, причём: x1 должно быть равно a, xk должно быть равно b, число xi должно быть получено с помощью одной из двух операций из числа xi - 1 (1 < i ≤ k). Если ответов несколько, разрешается вывести любой из них.

Изводить два типа операций: умножить имеющееся у него число на 2 (то есть заменить число x числом 2·x); приписать к имеющемуся у него числу цифру 1 справа (то есть заменить число x числом 10·x + 1). Вам надо помочь Василию получить из числа a число b с помощью описанных операций, либо сообщить, что это невозможно. Обратите внимание, что в этой задаче не требуется минимизировать количество операций. Достаточно найти любой из способов получить из числа a число b. Входные данные В первой строке записаны два целых положительных числа a и b (1 ≤ a < b ≤ 109) — число, которое есть у Василия, и число, которое он хочет получить. Выходные данные Если получить число b из числа a невозможно, выведите «NO» (без кавычек). В противном случае в первую строку выведите «YES» (без кавычек). Во вторую строку выведите число k — количество чисел в последовательности превращений. В третьей строке выведите последовательность превращений x1, x2, ..., xk, причём: x1 должно быть равно a, xk должно быть равно b, число xi должно быть получено с помощью одной из двух операций из числа xi - 1 (1 < i ≤ k). Если ответов несколько, разрешается вывести любой из них.

Ответы:
Диля Федоренко
15-05-2018 14:33

Данный код делает даже больше - подсчитывает сколькими способами можно перевести начальное число в конечное, и как именно.  Формат вывода подогнать не сложно# Код на ruby 2.2.3p173def f0(number, log) #  n = 10 * number + 1  log += " + 1 "  log += "[" + n.to_s + "] "  return [n, log]enddef f1(number, log) #  n = 2 * number  log += " * 2 "  log += "[" + n.to_s + "] "  return [n, log]enddef f2(number, log) #  n = number + 4  log += " + 4 "  log += "[" + n.to_s + "] "  return [n, log]endstart_num = 14 # начальное числоend_num = 28 # конечное числоmax_steps = end_numop_numbers = 2count = 0for steps in 1..max_steps  for i in 0..op_numbers**steps-1      s = ("000000000000000000000000000000" + i.to_s(op_numbers))[-steps..-1]      num = start_num      log = start_num.to_s      for k in 0..s.size - 1          num, log = f0(num, log) if s[k] == "0"          num, log = f1(num, log) if s[k] == "1"          # num, log = f2(num, log) if s[k] == "2"          break if num > end_num      end      # p [num, log, s, steps, i]      if num == end_num          log += " = " + end_num.to_s          count += 1          p log      end  endendp count

Картинка с текстом вопроса от пользователя Лерка Левина

⭐⭐⭐⭐⭐ Лучший ответ на вопрос «У Василия есть число a, которое он хочет превратить в число b. Для этого он может про» от пользователя Лерка Левина в разделе Информатика. Задавайте вопросы и делитесь своими знаниями.

Открой этот вопрос на телефоне - включи камеру и наведи на QR-код!