Задача на Python:как представить n в виде а+b+c+d, где а+k=b-k=с*k=d/k?

B. Старая задача на новый лад (15 баллов)

Ограничение времени ​ 1 секунда

Ограничение памяти ​ ​ 64Mb

Ввод ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ стандартный ввод или input.txt

Вывод ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ стандартный вывод или output.txt

Одна старая задача имеет следующий вид

"Разбить часло 45 на сумму четырёх слагаемых так, что если к первому прибавить 2 из второго вычесть 2, третье умножить на 2, а четвертое разделить на 2, то получится одно и то же число".

Ответ к этой задаче - четыре числа 8, 12, 5 и 20. Можно убедиться, что в сумме они дают число 45, а если с каждым из них проделать соответствующую арифметическую операцию, то получится одно и тоже число 10.

Вам нужно решить чуть более общую задачу: даны числа n и k. Нужно представить число n в виде суммы четырех целых неотрицательных слагаемых а, b, c, d, таких, что а+k=b-k=с*k=d/k. Гарантируется, что для заданных n и k такое разбиение существует.

Формат ввода

В одной строке через пробел два числа n и k 1≤n*k≤10¹⁵

Формат вывода

Вывести через пробел в одну строку четыре целых неотрицательных числа a, b, с, d, таких, что a+b+c+d=n и a+k=b-k=c*k=d/k

Пример 1

Ввод ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 45 2

Вывод​ ​ ​ ​ ​ ​​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 8 12 5 20

Пример 2

Ввод ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ 128 7

Вывод ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​7 21 2 98

0
Жалоба

Ответы (1)

Для решения этой задачи надо найти то число (t), которому равны значения а+k=b-k=с*k=d/k

t=а+k=b-k=с*k=d/k

О числе t из условия задачи известно, что это число меньше числа n, потому что каждое из чисел a, b, c и d меньше числа n.

Алгоритм решения задачи представляет поиск числа t подбором целых неотрицательных значений.

Зная число t, можно легко определить чему равны искомые числа:

а=t-k

b=t+k

с=t/k

d=t*k

Ввод осуществляется вводом строки, с последующим разбором функцией split на отдельные подстроки, разделённые пробелом, которые преобразуем в целые числа функцией int:

n, k=input("n k=")

n=int(n)

k=int(k)

Можно эти операторы записать одной строкой используя map:

n,k=map(int,input("n k=").split())

Код программы

n,k=map(int,input("n k=").split())

for t in range(n):

​ ​ ​ ​ a=t-k

​ ​ ​ ​ b=t+k

​ ​ ​ ​ d=t*k

​ ​ ​ ​ c=n-(a+b+d)

​ ​ ​ ​ if a+k==b-k ==c*k ==d/k:

​ ​ ​ ​ ​ ​ ​ ​ print(a,b,c,d)

Пример выполнения:

n k=45 2

8 12 5 20

Тестировать код (ссылка на работающий пример)

автор
Ответить
+2
© 2012-2026 myanswer.ru
Все вопросы, размещенные на данном сайте, созданы пользователями или собраны из открытых источников. Связаться