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

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

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

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



Сообщение: 4
ссылка на сообщение  Отправлено: 17.10.22 22:06. Заголовок: Задание 5. (№ 5103) - не совпадет ответ


Не совпадает ответ с ответом на сайте.

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится двоичная запись числа N.
2) К этой записи дописываются ещё несколько разрядов по следующему правилу: если N чётное, то к нему слева дописывается 1, а справа - 10, если N нечетное – слева дописывается 11 и справа 0;
3) Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Число нечетное, следовательно слева дописываем 11, справа 0 – 11+1101+0 = 1111010.
3. На экран выводится число 122.
Сколько различных результатов, принадлежащих отрезку [800; 1500], может быть получено в результате работы автомата?

Подскажите, в чем ошибка в программе.

 
k = 0
for n in range(2000):
s = bin(n) [2:]
if int(s) % 2 == 0:
s1 = '1' + s + '10'
elif int(s) % 2 != 0:
s1 = '11' + s + '0'
r = int(s1, 2)
if 800 <= r <= 1500:
k += 1
print(k)


Ответ на сайте: 44
Ответ программы: 60

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


Администратор




Сообщение: 3758
ссылка на сообщение  Отправлено: 18.10.22 20:58. Заголовок: Агеева пишет: Сколь..


Агеева пишет:

 цитата:
Сколько различных результатов, ...



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





Сообщение: 181
ссылка на сообщение  Отправлено: 09.11.22 03:34. Заголовок: Константин Юрьевич, ..


Константин Юрьевич, здравствуйте!

Посмотрел опубликованное решение данной задачи, но не могу понять, для чего здесь объявляется переменная count, а затем ее значение еще и выводится на печать, если по условию необходимо найти …


 цитата:

Сколько различных результатов, ...



 
def alg( n ):
s = f"{n:b}"
if n % 2 == 0:
s = '1' + s + '10'
else:
s = '11' + s + '0'
return int(s, 2)

count = 0
res = set()
for n in range(1000):
if 800 <= alg(n) <= 1500:
count += 1
res.add( alg(n) )

print( count )
print( len(res) )


Спасибо!

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





Сообщение: 178
ссылка на сообщение  Отправлено: 08.11.22 12:21. Заголовок: Агеева пишет: Не со..


Агеева пишет:

 цитата:
Не совпадает ответ с ответом на сайте


можно попробовать чуть подправить ваш код, примерно так, ответ точно совпадет!
 
k=set()
for n in range(2000):
s = bin(n) [2:]
if n % 2 == 0:
s1 = '1' + s + '10'
else:
s1 = '11' + s + '0'
r = int(s1, 2)
if 800 <= r <= 1500:
k.add(r)
print(len(k))


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





Сообщение: 179
ссылка на сообщение  Отправлено: 08.11.22 12:42. Заголовок: кстати Агеева пишет:..


кстати
Агеева пишет:

 цитата:
elif int(s) % 2 != 0:


если данную строку заменить на короткое слово "если":
else:
то восприятие вашего кода повысится!!!
 
k = 0
num = [0]*1501

for n in range(2000):
s = bin(n) [2:]
if int(s) % 2 == 0:
s1 = '1' + s + '10'
else:
s1 = '11' + s + '0'
r = int(s1, 2)
if 800 <= r <= 1500:
num[r]+= 1 # исключаем повторяющиеся одинаковые значения

for n in range(800,1500+1):
if num[n]>0:
k=k+1
print(k)

а результат работы программы останется правильным

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





Сообщение: 180
ссылка на сообщение  Отправлено: 09.11.22 02:23. Заголовок: А если отказаться от..


А если взглянуть на распечатку num, то приходим к выводу, что можно отказаться от использования переменной k, а следовательно, и от второго цикла, примерно так:
 
num = [0]*1501

for n in range(500):
s = bin(n) [2:]
if int(s) % 2 == 0:
s1 = '1' + s + '10'
else:
s1 = '11' + s + '0'
r = int(s1, 2) # и от данной строки можно избавиться
if 800 <= r <= 1500:
num[r]+= 1

print(num.count(2)+ num.count(1))



окончательно получаем:
 
num = [0]*1501
for n in range(500):
s = bin(n) [2:]
if int(s) % 2 == 0:
s1 = '1' + s + '10'
else:
s1 = '11' + s + '0'
if 800 <= int(s1, 2) <= 1500:
num[int(s1, 2)]+= 1
print(num.count(2)+ num.count(1))



 цитата:
а результат работы программы останется правильным



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



Не зарегистрирован
ссылка на сообщение  Отправлено: 11.01.23 08:23. Заголовок: Как вариант: sp = f..


Как вариант:
sp = []
for n in range (1000):
r = bin(n)[2:]
if n % 2 == 0:
r = '1'+r+'10'
else:
r = '11'+r+'0'
if 800<=int(r,2)<=1500:
sp.append(int(r,2))
sp1=set(sp)
print(len(sp1))

Спасибо: 0 
Цитата Ответить





Сообщение: 254
ссылка на сообщение  Отправлено: 11.01.23 16:25. Заголовок: Dan пишет: Как вари..


Dan пишет:

 цитата:
Как вариант:
sp = []
for n in range (1000):
r = bin(n)[2:]
if n % 2 == 0:
r = '1'+r+'10'
else:
r = '11'+r+'0'
if 800<=int(r,2)<=1500:
sp.append(int(r,2))
sp1=set(sp)

print(len(sp1))



Если уж химичить, то без переливания из пустого в порожнее, т.е., уж лучше так:
 
sp = set()
for n in range (1000):
r = bin(n)[2:]
if n % 2 == 0:
r = '1'+r+'10'
else:
r = '11'+r+'0'
if 800<=int(r,2)<=1500:
sp.add(int(r,2))
print(len(sp))

Поскольку так будет и короче, и понятнее!

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

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