Алиса хочет угостить своих одноклассников. Есть 2 вида: шоколад и карамель. Они продаются наборами по 3 штуки, причем в упаковке есть конфеты каждого из двух видов (то есть в одной упаковке лежат две конфеты одного вида и одна конфета другого вида).
По внешнему виду упаковки нельзя понять какие конфеты лежат внутри
Чтобы никого не обидеть всем в классе нужно раздать конфеты одного вида. Какое минимальное число упаковок нужно купить чтобы конфет хватило на всех?
Нужно написать код для решения на python
Условия
Входные данные – в единственной строке задано число n (1
≤ n ≤ 109)-количество человек в классе.
Вывести единственное число-количество упаковок,
которое должна купить Алиса
python
n = int(input())
packs = 1
while packs < n:
packs += 3
print(packs)
Однако данное решение будет работать долго при больших значениях n, потому что оно увеличивает количество упаковок на 3 на каждой итерации.
Более оптимальное решение можно построить с учетом того, что каждая новая упаковка дает нам 2 новых конфеты. Мы можем сразу добавить количество новых конфет к общему количеству и проверять это число, вместо упаковок.
python
n = int(input())
candies = 1
while candies < n:
candies += 2
print(candies)
В этом решении мы использовали переменную candies вместо packs, так как она отражает количество конфет, а не упаковок.
Теперь, когда число достаточно большое (до $10^9$), решение с использованием итераций остается эффективным. Если бы число было еще больше, то можно было бы использовать аналитическое решение, которое основывается на формуле арифметической прогрессии: $S = (a1 + an) / 2 * n$, где a1 - первый член прогрессии (1 конфета), an - последний член прогрессии (столько конфет, сколько нам нужно), n - количество членов прогрессии (количество упаковок). Нам нужно найти n из уравнения $S = (1 + a_n) / 2 * n geq N$, где N - количество учеников в классе. Более подробное описание решения можно найти в данной ссылке [Python | Количество упаковок, необходимых для раздачи одинаковых конфет всем одногруппникам](https://www.geeksforgeeks.org/number-packs-needed-for-a-given-n/)Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет