Сумма n + k + ..., где каждое след. слагаемое — разность по модулю двух предыдущих
Полная формулировка задачи:
Для заданных n и k (n > k) вычислите сумму: n + k + |n - k| + ... , где каждое следующее слагаемое является разностью по модулю двух предыдущих. Вычисление прекратить, как только значение последнего слагаемого достигнет единицы. Если единица не будет достигнута до 100-го слагаемого, отобразить сумму первых 100 слагаемых.
Пример: n = 13, k = 8. Сумма = 13 + 8 + 5 + 3 + 2 + 1 = 32.
n = 8, k = 4. Единица в слагаемом не достигнута. Сумма = 272.
Были изучены только ввод-вывод, основные арифметические операции и условные операторы на элементарном уровне. Задачу требуется решить с помощью цикла, но сколько я не читал об этом в интернете, не могу вообще понять логики, по которой нужно строить решение.
"Код", который пытался. Первая часть (до "///") работает (нетрудно догадаться, почему). Я не понимаю, как вычислить сумму только первых 100 слагаемых и как формулировать условие, что "если до 100-го члена слагаемое != 1". По идее, сумма остаётся прежней, просто нужно взять ограниченное число слагаемых. Формулы суммы членов прогрессии использовать нельзя.
n = int(input('Введите натур. число: '))
k = int(input('Введите натур. число: '))
s = n + k
while abs(n - k) > 1:
n = abs(n - k)
k = abs(k - n)
s += n + k
print('Сумма = ', s)
///
s100 = n + k
if abs(n - k) != 1 in range (100):
n = abs(n - k)
k = abs(k - n)
s100 += n + k in range (100)
print('Сумма первых 100 слагаемых: ', s100)
Ответы (3 шт):
Вот так можно:
n = int(input('Enter the n: '))
k = int(input('Enter the k: '))
result = n + k
while (n != 1) and (k != 1):
n = abs(n-k)
k = abs(k-n)
result += n + k
print(result)
Внимание. При некоторых входных данных программа уйдет в бесконечный цикл:
n = 6,k = 2
6 + 2 + 4 + 2 + 4 + •••n=8,k=4
8 + 4 + 4 + 0 + 4 + 4 + 0 + •••- И их еще много
UPD:
n = int(input('Enter the n: '))
k = int(input('Enter the k: '))
addend_count = 2
result = n + k
while (n != 1) and (k != 1) and (addend_count < 100):
n = abs(n-k)
k = abs(k-n)
result += n + k
addend_count += 2
print(result)
Чтобы программа не уходила в бесконечный цикл я добавил условие:
n = int(input('Enter the n: '))
k = int(input('Enter the k: '))
count = 2
result = n + k
while (n != 1) and (k != 1) and (n > k):
if (count > 100): break
n = abs(n-k)
k = abs(k-n)
result += n + k
print(result)
Думаю, так будет правильнее.
Нужно добавит счетчик слагаемых в цикл.
n = int(input('Введите натур. число: '))
k = int(input('Введите натур. число: '))
s = n + k
counter = 2
while abs(n - k) != 1 and counter != 100:
n = abs(n - k)
k = abs(k - n)
s += n + k
counter += 2
print('Сумма = ', s)