Еще задачу можно без цикла решить оперевшись на бинарное представление числа. Количество нулей после первой единицы будет ответом, а если там попадется еще единица - значит ответ Нет Например bin(32) = 0b100000 -> 5
@dedpihto680
2 жыл бұрын
красиво. я и сам подумал что раз уж автор взялся задачи решать и выкладывать то должен делать это экономично хотя бы а не тупым перебором. а если таких чесел будет массив из миллиона? туповатый ролик в общем, или это канал для школьников?
@user-sc5dw7ih3b
2 жыл бұрын
@@dedpihto680 Нет, этот тип типо курс свой создал на Stepik и продает решения с codewars за подписку.
@hadouken6148
4 жыл бұрын
в будущем будет урок по разбору модуля array ( что это и как это работает ) ?
@egoroffchannel
4 жыл бұрын
а что там непонятного?
@whiteking2020
3 жыл бұрын
Здравствуйте Артём, я решил задачу по другому, результаты правильные но не знаю почему тест не пройдет: n = int(input()) count = 0 while n != 0: if n % 2 == 1: break n = n / 2 count += 1 if count == 0: print('НЕТ') else: print(count)
@Ky3ia
2 жыл бұрын
Решил похожим способом. Только у меня if else внутри цела while: n = int(input()) i = 0 while 2 ** i n: print('НЕТ')
@kosench4229
2 жыл бұрын
А почему курс по Django на степике закрыт?
@egoroffchannel
2 жыл бұрын
kzitem.infoUgkxSd0xFRFqcN9q9AAokw0LxcXtEWu-QOmy
@alex_pure
2 жыл бұрын
Решил вот так: n = int(input()) st = 0 while n%2 == 0: st += 1 n //= 2 if n == 1: print(st) else: print('НЕТ')
@user-ts2is9ps1u
4 жыл бұрын
Здравствуйте, я посмотрел обучение на ютубе пока только до функций, потом порешал все задания на stepic. Потом нашел задачу на codeforces. codeforces.com/problemset/problem/1359/D . Я перепробовал несколько способов в итоге максимум что придумал, это брать первое значение в списке увеличивая его потом на одно до конца, в другой массив записывать сумму, и еще в другой записывать максимальное число получившихся отрезков.ну и соответственно вычитать максимальное число из суммы, и уменьшать первоначальный список на 1. В итоге ошибка по времени на 13 тесте когда 100000 значений и соответственно в разы больше сумм.Как по другому можно решить эту задачу?)
@egoroffchannel
4 жыл бұрын
добрый день, там есть разбор к решению этой задачи
@user-kx1vp6xw2g
2 жыл бұрын
А через логортфмы разве не оптимальнее будет?
@sawfriendship
2 жыл бұрын
Логортфм по сути тоже самое и делает) Попробуйте написать функцию поиска логортфма)
@user-wr4is2vr2o
4 жыл бұрын
Делить на 2 ваил пока не будет 1 или не 1, если 1 то степень, если нет, то не степень. Вариант 2 - создать множество степеней двойки и проверять содержится ли в нем число. Но это наверно дольше и больше памяти занимает? Но так коротко и изящно у меня бы не получилось мне кажется...
@grrr89
4 жыл бұрын
Ну, второй вариант такой себе. Это же сколько надо степеней двойки написать
@egoroffchannel
4 жыл бұрын
смотря как делить. если обычно, то мы сразу будем иметь дело c float
@dedpihto680
2 жыл бұрын
само собой делить будет выгоднее для обработки большого количества чисел. но само собой после деления требуется проверка что число близко к целому типа 4,00000001 получится итд. ну и самый быстрый способ для обработки большего количества это создание проиндексированной базы данных степеней двоек. выходит ли это за рамки питона? не думаю. многие библиотеки питона отлично работают с базами данных создают удаляют и тд.
@srjsibg6osdaab946
Жыл бұрын
import sys a = int(input()) i = 0 if a % 2 != 0: print('НЕТ') sys.exit() else: while 2**i < a: i += 1 print(i) # почему теcты не даёте? как в поколение питон?
@user-vv6th8ow8v
9 ай бұрын
Кто-нибудь объяснит мне, почему это не правильно? def is_stepen_2(a: int) -> int | str: stepen = 0 while stepen in range(a + 1): if pow(2, stepen) == a: return stepen stepen += 1 return "НЕТ"
@Investtment_Hub
Жыл бұрын
что вообще значит степень двойки?
@VideoGameAddiction
Жыл бұрын
скопировал код один в один и получаю ошибку "Time limit exceeded Killed" автор вообще проверяет актуальность своего курса или на пофиг лепит новые модули издеваясь над учениками?
@user-io7qb8fk1l
Жыл бұрын
#include int main() { int N; scanf("%d", &N); while (N > 2 && N%2 == 0) { N = N / 2; } if (N == 2) { printf("YES"); } else { printf("NO"); } return 0; }
Пікірлер: 25