На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 9
ссылка на сообщение  Отправлено: 07.11.21 02:00. Заголовок: Задание 17 задача 195


Доброго времени суток!

Текст задания:

 цитата:
(П. Волгин) В файле 17-9.txt содержится последовательность целых чисел. Элементы последовательности могут принимать значения от 0 до 1100 включительно. Определите сначала количество троек элементов последовательности, в которых хотя бы два числа в двоичной системе счисления имеют не менее 3 единиц и эти же два числа в двоичной системе счисления имеют как минимум один ноль, а затем максимальное число среди максимальных чисел в подходящих тройках. Под тройкой подразумевается три идущих подряд элемента последовательности.



Примененное решение:

  
data = [int(x) for x in open('…\17-9.txt')]

ma = 0
count = 0
for i in range(2,len(data)):
troyka = [data[ i-2],data[ i-1],data[ i]]
r = 0
for _int in troyka:
binary = bin(_int)
if binary.count('1') >= 3 and binary.count('0') > 1:
r +=1

if (r>=2):
count +=1
ma = max(ma, data[ i-2],data[ i-1],data[ i])

print( count, ma )


Предпосылка вопроса:

Ответ к задаче, указанный как правильный (30 и 1027) получается, если при получении числа в двоичной системе использовать конструкцию
n2 = bin(n10),
которая возвращает результат в формате «0b…», те с префиксом-указателем того, что число является двоичным.

Если же перевести число в двоичную систему "в рукопашную", или использовать конструкцию
n2 = bin(n10)[2:]
те при отсутствия префикса «0b», после чего ответ получается (28 и 1027)

Разница в количестве троек получается из за того, что в последовательности присутствует число 127, которое в двоичной системе счисления выглядит как 0b1111111, из за чего попадает под условие binary.count('0') (в двоичной системе счисления имеет как минимум один ноль).

Вопрос:

При решении задач ЕГЭ что подразумевать под словосочетанием "числа в двоичной системе счисления"?
Это числа вида "0b010101" или "010101"?

Суть вопроса:
Насколько корректно утверждать, что число 127 "в двоичной системе счисления имеет как минимум один ноль", ведь этот 0 - не само число, а часть префикса-указателя двоичного счисления?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]





Сообщение: 10
ссылка на сообщение  Отправлено: 07.11.21 17:03. Заголовок: И, кстати, почему ..


И, кстати, почему
bin(127) = 0b1111111?

0b1111111 должно быть вроде 255 в десятеричной...

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 516
ссылка на сообщение  Отправлено: 07.11.21 20:07. Заголовок: 255 это 8 единиц, а ..


255 это 8 единиц, а тут 7. Вообще согласен, префикс не должен влиять на ответ.

Discussio mater veritas est Спасибо: 1 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 09.11.21 10:47. Заголовок: Префикс не влияет на..


Префикс не влияет на ответ. Число 127 в двоичной системе счисления не имеет нуля. Здесь под нулями имеются в виду значащие нули.

Мое решение:
def count1(n):
count = 0
while n>0:
if n % 2 == 1:
count +=1
n //= 2
return count

def count0(n):
count = 0
while n>0:
if n % 2 == 0:
count += 1
n //=2
return count

f = open("1.txt")
a = []
m = 0
ms = 0
k = 0
for i in f:
a.append(int(i))
for i in range(len(a)-2):
if (count1(a[i ]) >=3 and count1(a[i+1]) >=3 and count0(a[i ])>0 and count0(a[i+1]) > 0) or (count1(a[i+1])>=3 and count1(a[i+2])>=3 and count0(a[i+1])>0 and count0(a[i+2]) > 0) or (count1(a[i ])>=3 and count1(a[i+2]) >= 3 and count0(a[i ])>0 and count0(a[i+2]) > 0):
k += 1
m = max(a[i ],a[i+1],a[i+2])
if m>ms:
ms = m

print(k,ms)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1738
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет