У Василия есть число 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). Если ответов несколько, разрешается вывести любой из них.
Данный код делает даже больше - подсчитывает сколькими способами можно перевести начальное число в конечное, и как именно. Формат вывода подогнать не сложно# Код на 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
Также наши пользователи интересуются:
Помогите решить задачу по информатике Один раз посетив магазин канцтоваров, Вас?1.is David in the chess club? 2.is Martina interested in ecologe?3.are David and Martina in the karate club? 4.is Emma in the chess club?5.are
⭐⭐⭐⭐⭐ Лучший ответ на вопрос «У Василия есть число a, которое он хочет превратить в число b. Для этого он может про» от пользователя Лерка Левина в разделе Информатика. Задавайте вопросы и делитесь своими знаниями.
Открой этот вопрос на телефоне - включи камеру и наведи на QR-код!