1:34:00 Более компактный вариант решения: for N in range(1, 1000): s = sum([int(x) for x in str(N) if int(x) % 2 == 0]) s2 = sum([int(str(N)[x]) for x in range(len(str(N))) if (x + 1) % 2 == 0]) r = abs(s2 - s) if r == 7: print(N,r)
59:00 def twelf(x): s = '' while x > 0: s = str(x % 12) + s x //= 12 return s a = [] for n in range(12, 1000): s = twelf(n) if n % 12 == 0: s += s[-2:] else: s += twelf(n % 12 * 9) R = int(s, 12 ) if R > 300: a.append(R) print(min(a))
Сумму цифр в числе можно еще так искать, если другое не вспомнится, то довольно примитивный способ ( как по мне) h = 0 b = '123441' for i in range(5): h += b.count(str(i))*i print(h)
почему на 1:08:39 вы прибавляете 1 к десятичному числу, если сказано, что к двоичному и какой тогда должен быть ответ? на таком диапазоне у меня не выдавал, только до 180
Здравствуйте, хочу спросить на счёт счётчика, я правильно понимаю, если нам лень считать, то мы задаём счётчик k = 0, а далее k = k + 1 к k прибавляем и его запускаем и так он начинает считать.
Алексей, у меня вопрос к задаче под названием "Двоичная запись 3". Объясните пожалуйста: почему, когда мы добавили к перемнной b ещё одну единицу, переменная b не двоичная запись числа и вы ввели переменную b1?.... Возможно не корректно сформулировал, поэтому, если вам не сложно, объясните пожалуйста ещё раз тот самый номер?... Очень хочу понять...
@@savanasha так, алгоритм такой: мы проходимся по всем N и строим ее двоичную запись (это мы записываем в переменную b и b1). согласно пункту 3) в условии, нам нужно проверять четное или нечётное количество единиц как раз у этой самой b1. зачем же нам вводить ещё одну переменную? потому что сначала, перед пунктом 3), нам нужно выполнить пункт 2). но если мы выполним пункт 2), не вводя вторую переменную, то не сможем верно выполнить пункт 3). например, N=5, тогда его двоичная запись b1 ='101'. хорошо, идём к следующему пункту 2) так, нужно продублировать последнюю цифру, окей, теперь логично b1='1011'??? идём дальше. пункт 3) хм, если прочитать внимательно, то условия о четности чисел единиц должны проверяться не в изменённой записи (b1='1011'), а в изначальной (b1='101'). ох, и как же быть? мы ведь "удалили" эту самую изначальную запись, значит проверка в третьем пункте будет проводиться ошибочно! и чтобы этого избежать мы и вводим вторую переменную b - с ней мы будем работать и изменять ее - дублировать последнюю цифру, дописывать биты четности, а вот переменную b1 будем использовать для проверки в пункте 3), чтобы ничего "не поломалось" :)
@@savanashaвозможно вас немного ввела в ступор запись. может так будет понятнее: for n in range(1,100): b1 = bin(n)[2:] #строим двоичную запись b = b1 #вводим ещё одну переменную (равную b1), которую мы будем изменять в будущем b = b + b[-1] #изменяем b по второму пункту дальше проверяем условие из пункта 3), считая единицы у b1 (нашей не изменённой записи), а дописываем цифры, сказанные в этом же самом пункте уже у b
@@savanasha но в целом, можно обойтись и одной переменной, если для вас, может, такая логика записи выйдет понятнее: for n in range(1,100) b = bin(n)[2:] b = b + b[-1] if b[:-1].count('1')%2==0: b=b+'0' else: b=b+'1' чтобы не вводить вторую переменную, я сделала так: построила двоичную запись числа N, продублировала последнюю цифру, проверку по четности осуществляла с b[:-1], то есть чисто для проверки использовала изменённую b, но без последней дублированной цифры, при этом b осталась такой же, как и после действий второго пункта
1:46:21 Почему, Алексей Михайлович, вы делаете перевод в int. Я понял, что типо двоичная Запись остатка от деления, но разве нельзя b двоичное разделить на 5?
для тех , кому лень учить английский алфавит или писать string.asii_lowercase: a = '1234567890qwertyuiopasdfghjklzxcvbnm' m ='0'*36 for i in a: k = int(i,36) m = m[:k] + i + m[k+1:] print(m)
11:25 Нет особой необходимости два раза повторять одно и то же условие. Можно просто написать:
if b.count('1')%2==0:
b = b + '00'
else:
b = b + '10'
26:28 можно через лямбда-функцию еще написать: sum( map( lambda x: int( x, 16 ), b ) )
29:00
k = 0
for n in range(1,1000):
s = bin(n)[2:]
s += str(sum(map(int,s))%2)
s += str(sum(map(int,s))%2)
if 210
C новосельем!!
И куда он переехал
1:34:00
Более компактный вариант решения:
for N in range(1, 1000):
s = sum([int(x) for x in str(N) if int(x) % 2 == 0])
s2 = sum([int(str(N)[x]) for x in range(len(str(N))) if (x + 1) % 2 == 0])
r = abs(s2 - s)
if r == 7:
print(N,r)
59:00
def twelf(x):
s = ''
while x > 0:
s = str(x % 12) + s
x //= 12
return s
a = []
for n in range(12, 1000):
s = twelf(n)
if n % 12 == 0:
s += s[-2:]
else:
s += twelf(n % 12 * 9)
R = int(s, 12 )
if R > 300:
a.append(R)
print(min(a))
Так решение неверное, например из 124 ты получишь 104 вместо a4
twelve !!!!!!!
Самое большое количество приветов другим заданиям было передано именно в этом вебе. Привет-привет всем упомянутым заданиям! :)
Сумму цифр в числе можно еще так искать, если другое не вспомнится, то довольно примитивный способ ( как по мне)
h = 0
b = '123441'
for i in range(5):
h += b.count(str(i))*i
print(h)
b = bin(x)[2:]
s = str(x)
print (s.count('1'))
почему на 1:08:39 вы прибавляете 1 к десятичному числу, если сказано, что к двоичному и какой тогда должен быть ответ? на таком диапазоне у меня не выдавал, только до 180
Увеличение на один одинаково работает во всех системах счисления
поняла, спасибо@@kompege
Здравствуйте, хочу спросить на счёт счётчика, я правильно понимаю, если нам лень считать, то мы задаём счётчик k = 0, а далее k = k + 1 к k прибавляем и его запускаем и так он начинает считать.
Ну в общем да. Представь что мы загибаем пальцы
29:36
Здравствуйте Алексей, а если программа все же может иметь в списке повторы, как лучше перебрать?
до начала цикла:
mas = []
после проверки вывода:
mas.append(r)
после окончания вывода:
print(len(set(mas)))
Алексей, у меня вопрос к задаче под названием "Двоичная запись 3". Объясните пожалуйста: почему, когда мы добавили к перемнной b ещё одну единицу, переменная b не двоичная запись числа и вы ввели переменную b1?....
Возможно не корректно сформулировал, поэтому, если вам не сложно, объясните пожалуйста ещё раз тот самый номер?... Очень хочу понять...
b1 введена для того чтобы не изменять изначальную запись двоичного числа N
@@kompege если честно, вообще не понял ваш ответ... Мы ведь и работаем с изначальной записью двоичного числа, разве нет?
@@savanasha так, алгоритм такой: мы проходимся по всем N и строим ее двоичную запись (это мы записываем в переменную b и b1). согласно пункту 3) в условии, нам нужно проверять четное или нечётное количество единиц как раз у этой самой b1. зачем же нам вводить ещё одну переменную? потому что сначала, перед пунктом 3), нам нужно выполнить пункт 2). но если мы выполним пункт 2), не вводя вторую переменную, то не сможем верно выполнить пункт 3).
например, N=5, тогда его двоичная запись b1 ='101'. хорошо, идём к следующему пункту 2) так, нужно продублировать последнюю цифру, окей, теперь логично b1='1011'??? идём дальше. пункт 3) хм, если прочитать внимательно, то условия о четности чисел единиц должны проверяться не в изменённой записи (b1='1011'), а в изначальной (b1='101'). ох, и как же быть? мы ведь "удалили" эту самую изначальную запись, значит проверка в третьем пункте будет проводиться ошибочно! и чтобы этого избежать мы и вводим вторую переменную b - с ней мы будем работать и изменять ее - дублировать последнюю цифру, дописывать биты четности, а вот переменную b1 будем использовать для проверки в пункте 3), чтобы ничего "не поломалось" :)
@@savanashaвозможно вас немного ввела в ступор запись. может так будет понятнее:
for n in range(1,100):
b1 = bin(n)[2:] #строим двоичную запись
b = b1 #вводим ещё одну переменную (равную b1), которую мы будем изменять в будущем
b = b + b[-1] #изменяем b по второму пункту
дальше проверяем условие из пункта 3), считая единицы у b1 (нашей не изменённой записи), а дописываем цифры, сказанные в этом же самом пункте уже у b
@@savanasha но в целом, можно обойтись и одной переменной, если для вас, может, такая логика записи выйдет понятнее:
for n in range(1,100)
b = bin(n)[2:]
b = b + b[-1]
if b[:-1].count('1')%2==0:
b=b+'0'
else:
b=b+'1'
чтобы не вводить вторую переменную, я сделала так: построила двоичную запись числа N, продублировала последнюю цифру, проверку по четности осуществляла с b[:-1], то есть чисто для проверки использовала изменённую b, но без последней дублированной цифры, при этом b осталась такой же, как и после действий второго пункта
1:46:21 Почему, Алексей Михайлович, вы делаете перевод в int. Я понял, что типо двоичная Запись остатка от деления, но разве нельзя b двоичное разделить на 5?
В любом случае это строка, а не число, её нельзя разделить, если не перевел в int()
57:06 почему range с 12, а не с 1? Из-за 12СС?
N>11 по условию
@@kompege спасибо!
59:00 правильный ответ будет 306, для N = 2!
По условию значения N>11
19:34 ФАЙЛ НЯШКА !!!!!!!!!!!!!!!! =))
Задачу 62 быстрее и проще решить аналитически
что-то у него седые волосы что ли появились...
Учителем работает всё-таки
А зачем он работает учителем? Что за аскет такой@@MuXaJlbl4
что же вас в этом удивляет?
Поседел от вопросов учеников
рановато чёт @@Rahim-nq8cc
a = '1234567890qwertyuiopasdfghjklzxcvbnm'
м ='0'*36
Ибо i в a:
k = int(i,36)
m = m[:k] + i + m[k+1:]
печать (м)
для тех , кому лень учить алфавит и string.ascii
для тех , кому лень учить английский алфавит или писать string.asii_lowercase:
a = '1234567890qwertyuiopasdfghjklzxcvbnm'
m ='0'*36
for i in a:
k = int(i,36)
m = m[:k] + i + m[k+1:]
print(m)