@hilowblind

While, легкая задачка, но выходит ошибка !?

Вот эта задачка codeforces.com/problemset/problem/579/A
spoiler
Вы — большой любитель бактерий. Вам хочется вырастить немного бактерий в коробочке.

Изначально коробочка пуста. Каждое утро можно положить любое количество бактерий в коробочку. Каждую ночь каждая бактерия делится на две бактерии. Когда-нибудь вы надеетесь увидеть ровно x бактерий в коробочке.

Какое минимальное количество бактерий вам суммарно надо положить в коробочку для достижения этой цели?

Входные данные
В единственной строке записано одно целое число x (1 ≤ x ≤ 109) — количество бактерий.

Выходные данные
Единственная строка, содержащая одно целое число — ответ на задачу.

Примеры
входные данные
5
выходные данные
2

входные данные
8
выходные данные
1

Примечание
В первом примере мы можем положить одну бактерию в коробочку утром первого для, а утром третьего дня в коробочке будет 4 бактерий. Теперь надо положить в коробочку ещё одну бактерию, в результате чего в коробочке окажется 5 бактерий. Мы суммарно добавили 2 бактерии в коробочку, так что ответ равен 2.

Во втором примере мы можем положить одну бактерию утром первого дня, тогда утром четвёртого дня в коробочке будет 8 бактерий. Таким образом, ответ равен 1.


Моё решение, по-моему правильно все, но при тесте возникает ошибка:

x = int(input())
kol = 1
while kol <= x:
    kol = kol * 2
kol = int(kol/2)
if x == 0:
    print(x)
print(x - kol +1)
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 2
LaRN
@LaRN
Senior Developer
Похоже, что решение - это количество единиц в двоичном представлении исходного количества X.

5 - 101 - 2 единицы
8 - 1000 - 1 единица
15 -1111 - 4 единицы

и т.д.
Ответ написан
BitNeBolt
@BitNeBolt
С теми данными, что и там выдает правильные результаты:
a = int(input("a: ")) #ввод

bact = 0 #кол-во добавленных бактерий

while True:
    if a % 2 == 1:
        bact += 1
    
    a = (a - (a % 2)) / 2

    if a == 1:
        bact += 1
        break

print(bact)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы