Найти в Дзене
Be Happy

Решение задач по программированию на Python (часть 4, while)

Две задачи со "звездочкой": Сложное уравнение и Котлеты. И три просто интересных для меня: Числа Фибоначчи, Номер числа Фибоначчи и Исполнитель "Раздвоитель".
Оглавление
картинка с YouTube канала PrograNattion
картинка с YouTube канала PrograNattion

Представляю вашему вниманию решение нескольких занимательных задач по программированию, взятых из курса обучения "Основы программирования на Python" (автор курса: National Research University Higher School of Economics, 2 неделя обучения), размещенному на сайте coursera.org.

Две задачи со "звездочкой": Сложное уравнение и Котлеты. И три просто интересных для меня: Числа Фибоначчи, Номер числа Фибоначчи и Исполнитель "Раздвоитель".

Сложное уравнение.

"Решить в целых числах уравнение: (ax+b) / (cx+d) =0.

Необходимо вывести все решения, если их число конечно,

“NO”, если решений нет,

“INF” , если решений бесконечно много."

(взято с сайта www.coursera.org/learn/python-osnovy-programmirovaniya/programming/4zxQo/slozhnoie-uravnieniie)

Решение

a = int(input())
b = int(input())
c = int(input())
d = int(input())
if a == 0 and b == 0:
....print(
'INF')
elif a == 0 or b * c == a * d:
....print(
'NO')
elif b % a == 0:
....x = -b // a
....print(x)
else:
....print(
'NO')

С точки зрения логики программирования все элементарно, а вот математику немного вспомнить придется.

Котлеты.

"На сковородку одновременно можно положить k котлет. Каждую котлету нужно с каждой стороны обжаривать m минут непрерывно. За какое наименьшее время удастся поджарить с обеих сторон n котлет?"

(взято с сайта www.coursera.org/learn/python-osnovy-programmirovaniya/programming/OGVGo/kotliety)

Решение

k = int(input())
m = int(input())
n = int(input())
if n <= k:
....t = 2 * m
elif n * 2 % k == 0:
....t = m * (n * 2 // k)
else:
....t = m * (1 + (n * 2 // k))
print(t)

Числа Фибоначчи.

"Последовательность Фибоначчи определяется так:

F[0] = 0, F[1] = 1, ..., F[n] = F[n-1] + F[n-2].

По данному числу n определите n-е число Фибоначчи F[n]."

(взято с сайта www.coursera.org/learn/python-osnovy-programmirovaniya/programming/mNFkq/chisla-fibonachchi)

Решение

n = int(input())
if n == 0:
....print(0)
elif n == 1:
....print(1)
else:
....F1 = 0
....F2 = 1
....i = 1
....Fn = 0
....while n > i:
........Fn = F1 + F2
........F1, F2 = F2, Fn
........i += 1
....print(Fn)

Номер числа Фибоначчи.

"Дано натуральное число A. Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число n, что F[n]=A.

Если А не является числом Фибоначчи, выведите число -1."

(взято с сайта www.coursera.org/learn/python-osnovy-programmirovaniya/programming/eTYuD/nomier-chisla-fibonachchi)

Решение

A = int(input())
if A == 0:
....print(0)
elif A == 1:
....print(1)
else:
....F1 = 0
....F2 = 1
....n = 1
....Fn = 0
....while Fn < A:
........Fn = F1 + F2
........F1, F2 = F2, Fn
........n += 1
....if Fn == A:
........print(n)
....else:
........print(-1)

Чтобы получить решение этой задачи, нужно последовательно перебирать числа Фибоначчи от 0 до А и выходить из цикла, когда текущее число равно или уже больше А. Предыдущая задача стала частью этой.

Исполнитель "Раздвоитель".

"Исполнитель “Раздвоитель” преобразует натуральные числа. У него есть две команды: “Вычесть 1” и “Разделить на 2”, первая команда уменьшает число на 1, вторая команда уменьшает число в два раза. Дано два натуральных числа A и B (A>B). Напишите алгоритм для "Раздвоителя", который преобразует число A в число B и при этом содержит минимальное число команд.

Команды нужно выводить по одной в строке, первая команда обозначается, как -1, вторая команда как :2."

(взято с сайта www.coursera.org/learn/python-osnovy-programmirovaniya/programming/qb21N/ispolnitiel-razdvoitiel)

Решение

a = int(input())
b = int(input())
while a >= b:
....if a % 2 == 0 and (a / 2) >= b:
........a = a / 2
........print(
':2')
....elif (a % 2 != 0 or (a / 2) < b) and a > b:
........a = a - 1
........print(-1)
....else:
........break

Логика простая: если можно разделить пополам, то делим, если нет - вычитаем один и опять смотрим, можно ли делить.

Заключение.

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

Другие примеры решения типовых задач:

4 интересные задачи по программированию на PYTHON для начинающих (ч.1)

Решение задач по программированию на языке Python для начинающих (ч.2, IF)

Решение задач по программированию на языке Python для начинающих (ч.3, IF)

Решение задач по программированию на Python (часть 5, while)

Желаю всем успехов!