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

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

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

АвторСообщение
Администратор




Сообщение: 2742
ссылка на сообщение  Отправлено: 24.04.21 15:09. Заголовок: Ошибка в 5.Р-11


Sergey пишет:
 цитата:
Здраствуйте я обнаружил ошибку в примере к заданию №5 ,а именно P-11. В
задание спрашивается:* "Сколько разных значений будет показано на экране
автомата при последовательном вводе всех натуральных чисел от 500 до 5000?"*.
Вы не учли ,что* "2. Удаляются первая слева единица и все следующие
непосредственно за ней нули. Если после этого в числе не остаётся цифр,
результат этого действия считается равным нулю.*" То есть значений не 5 ,а
6. Так как число в степени 2(512, 1024, ...) будут равны нулю ,а значит он
выедет на экран следующие различные значения {256, 0, 2048, 512, 1024,
4096}.
P.S. Я всё просчитал на питоне вот код:
 def f(x): 
n = bin(x)
n = str(n)[2:]
n = n[1:]
if n.count("0") == len(n):
return 0
while n[0] == "0":
n = n[1:]

return x - int(n, 2)

set_s = set()
for n in range(500, 5001):
set_s.add(f(n))
print(set_s)

Если на 2-м шаге не остается цифр, то нулем считается не результат работы алгоритма, а результат этого шага. Правильно так:
if n.count("0") == len(n): 
return x - 0
Вот более короткая версия программы:
 def alg(x): 
s = "{:b}".format(x)
return x - int( s[1:], 2 )

allResults = set()
for x in range(500, 5001):
allResults.add(alg(x))

print(len(allResults))


___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


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

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