Python задачка "Всё ограниченно"
Нужно посчитать количество битов равных 1 в числе переведенном в двоичную систему, допустим число 13 , в битовом вариаинте 13 = 1101, ответ будет 3. У меня получилось написать код, который считает количество битов, но не проходит, я не особо понял условие задачи, поэтому условия оставляю на английском.
Числа в промежутке от 0 до 2^32
In your code you cannot have non-whitespace substrings of length greater than one with the exception of the following:int(,print(,input()
[![Задание][1]][1]
n=int(input())
bin_n = []
bin_n.append(bin(n))
count = 0
for i in bin_n:
for j in i:
if j == '1':
count+=1
print(count)
Ответы (4 шт):
у вас не код, а тихий ужас
вариант 1:
не проще ли сделать так:
value = int(input())
count = 0
while value > 0:
count += value % 2
value //= 2
print(count)
получить ввод от пользователя
перевести его в число
перевести побитово в двоичный вид (деление числа по модулю 2 даёт текущий бит, деление нацело на 2 уменьшает число)
подсчитать биты равные 1 (просто увеличиваем счетчик текущим битом - он или 1 или 0, 0 сумму не увеличивает)
вариант 2:
если же делать через строки как вы, тогда вот вам вариант вообще в 1 строку:
print(bin(int(input()))[2:].count('1'))
получить ввод от пользователя
перевести его в число
преобразовать число в hex представление в виде строки
отрезать первые 2 символа (в них содержится
0b- указатель, что строка это число в двоичном представлении)подсчитать кол-во
1
In your code you cannot have non-whitespace substrings of length greater than one with the exception of the following:int(,print(,input()
Простейшим решением этой головоломки могут быть 32 копии следующего блока:
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
( ( a & 1 ) > 0 ) - это аналог a % 2, только без деления.
Прямая проверка того, что последний бит включен.
Хотя, можно использовать и деление.
a = int( input() )
r = 0
# 0
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
# 1
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
# 2
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
# 3
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
# ...
# 32
r = r + ( ( a & 1 ) > 0 )
a = int( a / 2 )
print( r )
В коде нельзя иметь последовательности букв и прочих символов длиннее 1 символа, за исключением перечисленных. Отсюда следует: переменным давать имена из одной буквы и можно пользоваться только арифметическими операторами. Например:
n = input()
s = int( n )
r = 0
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
d = s % 2
s = int( s / 2 )
r = r + d
print( r )
Надо уже как-то оптимизировать:
h = 2 * 8 * 8
m = h - 1
b = [ 0 , 1 , 1 , 2 , 1 , 2 , 2 , 3 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 1 , 2 , 2 , 3 , 2 , 3 , 3 , 4 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 2 , 3 , 3 , 4 , 3 , 4 , 4 , 5 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 3 , 4 , 4 , 5 , 4 , 5 , 5 , 6 , 4 , 5 , 5 , 6 , 5 , 6 , 6 , 7 ]
s = int( input() )
t = int( s / h )
u = int( t / h )
v = int( u / h )
w = int( v / h )
print( b [ s & m ] + b [ t & m ] + b [ u & m ] + b [ v & m ] + b [ w & m ] )