Задача 6 — разбор задания ЕГЭ по предмету Информатика

  • Newtonew
  • ProTeachers
  • MOOC 2016
  • Большая переменная

Мы в соц.сетях:

  • Статьи
  • ·
  • Разборы
  • ·
  • Новости

Написать статью

Решение №1

От нас требуется найти минимальное N, при котором в результате работы алгоритма получится число, большее 125. Раз больше 125 и минималное, давайте рассмотрим число 126, как наименьшее, которое больше 125.

Давайте прежде всего проверим, что 126 могло получиться в результате работы алгоритма.

4 + =\\ = 1+2+4+8+16 = 31\)

Таким образом, ответ — 31.

Evgeny Smirnov

Сообщение:

Запрос успешно отправлен. В ближайшее время расширенный доступ будет предоставлен.

– Oбразование как Стиль Жизни

Присылайте свои колонки


и предложения

У вас есть интересная новость или материал из сферы образования или популярной науки?
Расскажите нам!

[email protected]

© 2014-2023 Newtonew. 12+

Просветительский медиа-проект об образовании, посвящённый самым актуальным и полезным концепциям, теориям и методикам, технологиям и исследованиям, продуктам и сервисам. Мы говорим о том, как развиваются и изменяются образование и наука.

Копирование материалов возможно только с разрешения редакции Newtonew.

ЕГЭ спецпроект ProTeachers

MOOC 2016 Большая переменная

Физика: игра света

Маршрут в будущее

Считаные годы

Образование XXI века

Мы используем файлы cookie для улучшения пользовательского опыта. Подробнее вы можете посмотреть в нашем пользовательском соглашении.

App Store Google Play

Подписаться на рассылку

Подписаться на рассылку

Авторизация на сайте

Вход через соц.сети:

ВКонтакте Facebook Google


Новый пользователь

Введите ваш email:

Введите пароль:

Повторите пароль:


  назад

Напомнить пароль

Введите email, на который вы зарегистрированы:


  назад

Пароль выслан

Мы выслали ваш пароль для входа в систему на указанный email.


Не забывайте о том, что вы можете авторизоваться в системе через социальные сети.

Если при регистрации в соц.сетях вы указывали тот же email что и на нашем сайте, то после авторизации вы попадете в свой профиль.

Вход через соц.сети:

ВКонтакте Facebook Google

Подтвердите регистрацию

На указанный e-mail было отправлено письмо со ссылкой. Пожалуйста, перейдите по ссылке для подтверждения.

Вход через соц.сети:

ВКонтакте Facebook Google

Регистрация подтверждена

Вы успешно зарегистрировались

05. Алгоритмы R и N

Сборник ЕГЭ-2023
Просмотров: 6110

ВАРИАНТ 1

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2)  Далее если исходное число четное, то справа к построенной двоичной записи числа N приписывается 0, если нечетное, то приписывается 1.

3)  Далее полученная на втором шаге алгоритма запись обрабатывается по следующему правилу:

а)  если количество единиц в двоичной записи кратно трем, то в этой записи два левых разряда заменяются на 11;

б)  если количество единиц в двоичной записи некратно трем, то в этой записи два левых разряда заменяются на 10.

Полученная таким образом запись является двоичной записью искомого числа R.

Например, для исходного числа 610 = 1102 результатом является число 10002 = 810, а для исходного числа 310 = 112, результатом является число 1112 = 710.

Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее чем 26.

  В ответе запишите  это число в десятичной системе счисления.


Решение и ответ

  

for x in range(1,30): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    if N[-1]== ‘0’: # преобразование 2 шага
        N = N + ‘0’
    else:
        N = N + ‘1’

    if N.count(‘1’)%3 == 0: # преобразование 3 шага
        R=N.replace(N[:2],’11’, 1)
    else:

        R=N.replace(N[:2],’10’, 1)

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы значений видим, что наименьшее N = 9 для R = 27

Ответ9

ВАРИАНТ 2

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2)  Далее если исходное число четное, то справа к построенной двоичной записи числа N приписывается 0, если нечетное, то приписывается 1.

3)  Далее полученная на втором шаге алгоритма запись обрабатывается по следующему правилу:

а)  если количество единиц в двоичной записи кратно трем, то в этой записи два левых разряда заменяются на 11;

б)  если количество единиц в двоичной записи некратно трем, то в этой записи два левых разряда заменяются на 10.

Полученная таким образом запись является двоичной записью искомого числа R.

Например, для исходного числа 610 = 110результатом является число 10002 = 810, а для исходного числа 310

 = 112, результатом является число 1112 = 710.

Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, не большее чем 37.   В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

 Решение как в первом варианте.

 for x in range(1,30): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    if N[-1]== ‘0’: # преобразование 2 шага
        N = N + ‘0’
    else:
        N = N + ‘1’

    if N.count(‘1’)%3 == 0: # преобразование 3 шага
        R=N.replace(N[:2],’11’, 1)
    else:
        R=N.replace(N[:2],’10’, 1)

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы значений видим, что наибольшее N = 25 для R = 35

Ответ25

ВАРИАНТ 3

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2)  Далее эта запись обрабатывается по следующему правилу:

а)  если количество значащих цифр в двоичной записи числа четное, то к этой записи в середину дописывается 1;

б)  если количество значащих цифр в двоичной записи числа нечетное, то запись не изменяется.

Полученная таким образом запись является двоичной записью искомого числа R.

Например, для исходного числа 510 = 101результатом является число 1012 = 510, а для исходного числа 210 = 102, результатом является число 1102 = 610.

Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее чем 26.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

  for x in range(1,30): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    if len(N)%2 == 0:
        R = N[:len(N)//2] + ‘1’ +N[len(N)//2:]
    else:
        R = N

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы значений видим, что наименьшее N  = 12 для R = 28

Ответ12

ВАРИАНТ 4

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2)  Далее эта запись обрабатывается по следующему правилу:

а)  если количество значащих цифр в двоичной записи числа четное, то к этой записи в середину дописывается 1;

б)  если количество значащих цифр в двоичной записи числа нечетное, то запись не изменяется.

Полученная таким образом запись является двоичной записью искомого числа R.

Например, для исходного числа 510 = 101результатом является число 1012 = 510, а для исходного числа 210 = 102, результатом является число 1102 = 610.

Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, не большее чем 26.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

  for x in range(1,30): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    if len(N)%2 == 0:
        R = N[:len(N)//2] + ‘1’ +N[len(N)//2:]
    else:
        R = N

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы значений видим, что наибольшее N  = 26 для R = 26

Ответ: 26

ВАРИАНТ 5

Автомат получает на вход трехзначное число. По этому число строится новое число по следующим правилам:

1. Вычисляются суммы квадратов первой и второй, а также второй и третьей цифр исходного числа.

2.  Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).

Пример. Исходное число: 621. Суммы квадратов цифр: 62 + 22 = 40; 22 + 12 = 5. Результат: 405. Укажите наибольшее число, в результате обработки которого автомат выдаст число 9752.

Решение и ответ

for x in range(100,1000):
    a= x//100
    b = (x//10)%10
    c = x % 10

    if (a ** 2 + b**2 == 97 and b**2 + c**2 == 52) or (a ** 2 + b**2 == 52 and b**2 + c**2 == 97):
        c, a = sorted((a, c))     

        print(a*100 +b*10+c)
        break

 Ответ946

ВАРИАНТ 6

Автомат получает на вход трехзначное число.  По этому число строится новое число по следующим правилам:

1. Вычисляются суммы квадратов первой и второй, а также второй и третьей цифр исходного числа.

2.  Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).

Пример. Исходное число: 621. Суммы квадратов цифр: 62 + 22 = 40; 22 + 12 = 5. Результат: 405. Укажите наибольшее число, в результате обработки которого автомат выдаст число 7434.

Решение и ответ

for x in range(100,1000):

    a= x//100
    b = (x//10)%10
    c = x % 10

    if (a ** 2 + b**2 == 74 and b**2 + c**2 == 34) or (a ** 2 + b**2 == 34 and b**2 + c**2 == 74):
        c, a = sorted((a, c))      

        print(a*100 +b*10+c)
        break

Ответ: 753

ВАРИАНТ 7

Автомат получает на вход трехзначное число.  По этому число строится новое число по следующим правилам:

1. Перемножаются все цифры исходного числа.

2. Суммируются все цифры исходного числа.

 3. Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).

Пример. Исходное число: 621. Произведение цифр 6х2х1 = 12. Суммы цифр: 6 + 2 + 1 = 9 Результат: 129. Укажите наибольшее число, в результате обработки которого автомат выдаст число 33621.

Решение и ответ

 for x in range(100,1000):
    a= x//100
    b = (x//10)%10
    c = x % 10
    p = a * b * c
    s = a + b + c

    if p == 336 and s == 21:
        c,b,a = sorted((a,b,c))
        print(a*100 + b*10 + c)
        break

Ответ: 876

ВАРИАНТ 8

Автомат получает на вход трехзначное число.  По этому число строится новое число по следующим правилам:

1. Перемножаются все цифры исходного числа.

2. Суммируются все цифры исходного числа.

 3. Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).

Пример. Исходное число: 621. Произведение цифр 6х2х1 = 12. Суммы цифр: 6 + 2 + 1 = 9 Результат: 129. Укажите наибольшее число, в результате обработки которого автомат выдаст число 24019.

Решение и ответ

for x in range(100,1000):
    a= x//100
    b = (x//10)%10
    c = x % 10
    p = a * b * c
    s = a + b + c

    if p == 240 and s == 19:
        c,b,a = sorted((a,b,c))
        print(a*100 + b*10 + c)
        break

Ответ: 865

ВАРИАНТ 9

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 4.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите минимальное число R, большее 56, которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

 for x in range(5,20): #перебираем х
    N = x — x % 4
    N=str(bin(N)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b 

    if N. count(‘1’)%2 == 0:
        N = N + ‘0’
    else:
        N = N + ‘1’
    if N.count(‘1’)%2 == 0:
        R = N + ‘0’
    else:
        R = N + ‘1’

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Ответ: 66

ВАРИАНТ 10

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 4.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите минимальное число R, большее 100, которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

  Решение как в варианте 9.

for x in range(20,35): #перебираем х

    N = x — x % 4
    N=str(bin(N)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b 

    if N.count(‘1’)%2 == 0:
        N = N + ‘0’
    else:
        N = N + ‘1’
    if N.count(‘1’)%2 == 0:
        R = N + ‘0’
    else:
        R = N + ‘1’

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы полученных значений мы видим, что минимальное больше 100, R=114.

Ответ: 114

ВАРИАНТ 11

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 4.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите наибольшее число N, для которого результат работы данного алгоритма меньше числа 64. В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

  Решение как в варианте 9.

 for x in range(10,35): #перебираем х 
    N = x — x % 4
    N=str(bin(N)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b  

    if N. count(‘1’)%2 == 0:
        N = N + ‘0’
    else:
        N = N + ‘1’
    if N.count(‘1’)%2 == 0:
        R = N + ‘0’
    else:
        R = N + ‘1’

     print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы полученных значений мы видим, что наибольшее N=15, соответствует R=48

Ответ: 15

ВАРИАНТ 12

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 4.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите наибольшее число N, для которого результат работы данного алгоритма меньше числа 47. В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

Решение как в варианте 9.

Из таблицы полученных значений мы видим, что наибольшее N=11, соответствует R=34.

Ответ: 11

ВАРИАНТ 13

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 8, после чего прибавляется остаток от деления N на 2.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите минимальное число R, большее 90, которое может являться результатом работы данного алгоритма. В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

for x in range(10,35): #перебираем х 
    N = x — x % 8
    N = N + N % 2
    N=str(bin(N)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b    

    if N.count(‘1’)%2 == 0:
        N = N + ‘0’
    else:
        N = N + ‘1’

    if N.count(‘1’)%2 == 0:
        R = N + ‘0’
    else:
        R = N + ‘1’

    print(x, int(R,2)) # переводим R в десятичную систему счисления

Из таблицы полученных значений мы видим, что наименьшее, большее 90,  R=96.

Ответ: 96

ВАРИАНТ 14

 На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Из числа N вычитается остаток от деления N на 8, после чего прибавляется остаток от деления N на 2.

2) Строится двоичная запись полученного результата.

3)  К этой записи дописываются справа еще два разряда по следующему правилу:

а)  складываются все цифры построенной двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы ее цифр на 2.

Полученная таким образом запись является двоичной записью искомого числа R.

Укажите минимальное число R, большее 97, которое может являться результатом работы данного алгоритма. В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

Решение как в варианте 13.

Из таблицы полученных значений мы видим, что наименьшее, большее 97,  R=130.

Ответ: 130

ВАРИАНТ 15

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) Каждый разряд этой записи заменяется двумя разрядами по следующему правилу: если в разряде стоит 0, то вместо него пишется 00; если в разряде стоит 1, то 1 заменяется на 11.

Например, двоичная запись 1001 числа 9 будет преобразована в 11000011. 

Полученная таким образом запись (в ней в два раза больше разрядов, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите минимальное число R, большее 32 которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

for x in range(1,50): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    N = N.replace(‘0′,’00’)
    N = N.replace(‘1′,’11’)

    R = int(N,2)# переводим R в десятичную систему счисления

    print(x, R) 

Из таблицы полученных значений мы видим, что наименьшее, большее 32,  R = 48.

Ответ: 48

ВАРИАНТ 16

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) Каждый разряд этой записи заменяется двумя разрядами по следующему правилу: если в разряде стоит 0, то вместо него пишется 00; если в разряде стоит 1, то 1 заменяется на 11.

Например, двоичная запись 1001 числа 9 будет преобразована в 11000011. 

Полученная таким образом запись (в ней в два раза больше разрядов, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите минимальное число R, большее 63 которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

 

Решение и ответ

 Решение как в варианте 15.

Из таблицы полученных значений мы видим, что наименьшее, большее 63,  R = 192.

Ответ: 192

ВАРИАНТ 17

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) Каждый разряд этой записи заменяется двумя разрядами по следующему правилу: если в разряде стоит 0, то вместо него пишется 01; если в разряде стоит 1, то 1 заменяется на 10.

Например, двоичная запись 1001 числа 9 будет преобразована в 10010110. 

Полученная таким образом запись (в ней в два раза больше разрядов, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите минимальное число R, большее 63 которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

 

Решение и ответ

for x in range(5,20): #перебираем х 
    N=str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    N = N.replace(‘1′,’xx’)
    N = N.replace(‘0′,’yy’)
    N = N.replace(‘xx’,’10’)
    N = N.replace(‘yy’,’01’)

    print(N)
    R = int(N,2)# переводим R в десятичную систему счисления

    print(x, R)

Из таблицы полученных значений мы видим, что наименьшее, большее 63,  R = 149.

Ответ: 149

ВАРИАНТ 18

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) Каждый разряд этой записи заменяется двумя разрядами по следующему правилу: если в разряде стоит 0, то вместо него пишется 01; если в разряде стоит 1, то 1 заменяется на 10.

Например, двоичная запись 1001 числа 9 будет преобразована в 10010110. 

Полученная таким образом запись (в ней в два раза больше разрядов, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите максимальное нечетное число R, меньшее 256 которое может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

 Решение как в варианте 17.

Из таблицы полученных значений мы видим, что максимальное нечетное , меньшее 256,  R = 169.

Ответ: 169

ВАРИАНТ 19

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) К этой записи дописываются справа еще два разряда по следующему правилу: если N делится нацело на 4, в конец числа (справа) дописывается сначала 0, а затем еще один 0; если N при делении на 4 дает остаток 1, то в конец числа (справа) дописывается сначала 0, потом 1; если N при делении на 4 дает остаток 2, то в конец числа (справа) дописывается сначала 1, потом 0; если N при делении на 4 дает остаток 3, то в конец числа (справа) дописывается сначала 1, затем еще 1.

Например, двоичная запись 1001 числа 9 будет преобразована в 100101, а двоичная запись 1100 числа 12 будет преобразована в 110000.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите максимальное число R, которое меньше 100 и может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления.

Решение и ответ

 for x in range(5,30): #перебираем х 
    N = str(bin(x)[2:]) #получаем двоичную запись, убираем первые 2 символа 0b
    if x % 4 == 0:
        N += ’00’
    if x % 4 == 1:
        N += ’01’
    if x % 4 == 2:
        N += ’10’
    if x % 4 == 3:
        N += ’11’   

    R = int(N,2)# переводим R в десятичную систему счисления

    print(x, R)

Из таблицы полученных значений мы видим, что наибольшее R, меньшее 100, равно 96.

Ответ: 96

ВАРИАНТ 20

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1)  Строится двоичная запись числа N.

2) К этой записи дописываются справа еще два разряда по следующему правилу: если N делится нацело на 4, в конец числа (справа) дописывается сначала 0, а затем еще один 0; если N при делении на 4 дает остаток 1, то в конец числа (справа) дописывается сначала 0, потом 1; если N при делении на 4 дает остаток 2, то в конец числа (справа) дописывается сначала 1, потом 0; если N при делении на 4 дает остаток 3, то в конец числа (справа) дописывается сначала 1, затем еще 1.

Например, двоичная запись 1001 числа 9 будет преобразована в 100101, а двоичная запись 1100 числа 12 будет преобразована в 110000.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R — результата работы данного алгоритма.

Укажите максимальное число R, которое меньше 111 и может являться результатом работы данного алгоритма.  В ответе запишите  это число в десятичной системе счисления 

Решение и ответ

Из таблицы полученных значений мы видим, что максимальное R, меньшее 111, равно 106.

Ответ: 106

  • Вперед
Добавить комментарий

Rating: ( 0 Rating )

РСЯ футер

python — Пожалуйста, помогите мне разобраться с проблемой. TypeError: объект ‘int’ не является итерируемым — эта ошибка возникает у меня при расчете.

Что я делаю не так?

Задача выглядит так: На вход алгоритма подается натуральное число N. На его основе алгоритм строит новое число R следующим образом.

  1. Вычисляется сумма S1 всех нечетных цифр десятичной системы счисления числа N. Если нечетных цифр нет, сумма S1 считается равной 0,
  2. .
  3. Вычисляется сумма S2 всех цифр десятичной записи числа N, стоящих на позициях с нечетными числами. Позиции нумеруются слева направо, начиная с 1.
  4. Результат R рассчитывается как модуль разницы между S1 и S2. Например, N = 4321. Сумма нечетных цифр S1 = 3 + 1 = 4. Сумма цифр в позициях с нечетными номерами S2 = 4 + 2 = 6. Результат алгоритма R = 6 – 4 = 2. . Укажите наименьшее число, в результате обработки которого по данному алгоритму получится число 31.

Вот мой код:

 для диапазона (100):
    s1 = сумма (int (x) для x в a, если int (x)% 2 == 1)
    s2 = интервал (а [0])
    R = абс (s1-s2)
    если R == 31:
        печать (а, р)
 

Эта строка кода moment(s1 = sum(int(x) for x in a if int(x) % 2)) возвращает ошибку:

TypeError: объект ‘int’ не является итерируемым

Что я делаю не так или как написать программу для нахождения суммы всех нечетных цифр числа?

  • питон
2

У вас есть:

 для диапазона (100):
 

Итак, на следующей строке a будет 0 в первый раз, затем на второй итерации это будет 1 и т. д. a имеет тип int .

Следующая строка:

 s1 = sum(int(x) for x in a if int(x) % 2)
 

Так как a является int , for x в пытается перебрать целое число, но это невозможно. Итак, вы получаете ошибку TypeError: 'int' object is not iterable .

 > s1 = sum(int(x) for x in a if int(x) % 2)
 

Ваши короткие имена переменных не помогают прояснить сложность с этим кодом. Давайте определим temp:

 цифр = list(map(int, str(a)))
     s1 = сумма (d для d цифрами, если d % 2)
     s2 = цифры [0]
 

(вызов list() не является строго необходимым, но я подумал, что это может быть полезно во время отладки.)

По-видимому, s1 означает «первую сумму». Я понятия не имею, как «вторая сумма» вписывается в код OP. Вам бы посоветовали переименовать s2 если хотите люди для полезного сотрудничества. Неясно, что означает магическое число 31 .


См. https://stackoverflow.com/help/minimal-reproducible-example. Непонятно, какую проблему вы пытаетесь решить и каков будет ожидаемый результат.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

9Алгоритм 0000. Расширьте случайный диапазон от 1–5 до 1–7

Думаю, у меня есть четыре ответа, два из которых дают точные решения, такие как у @Adam Rosenfield, но без проблемы с бесконечным циклом, а два других дают почти идеальное решение, но быстрее реализация, чем первая.

Лучшее точное решение требует 7 вызовов rand5 , но давайте продолжим, чтобы понять.

Сила ответа Адама в том, что он дает идеальное равномерное распределение, и существует очень высокая вероятность (21/25), что потребуются только два вызова rand5(). Однако в худшем случае это бесконечный цикл.

Первое решение ниже также дает идеальное равномерное распределение, но требует в общей сложности 42 вызовов rand5 . Никаких бесконечных циклов.

Вот реализация R:

 rand5 <- function() sample(1:5,1)
rand7 <- function() (sum(sapply(0:6, function(i) i + rand5() + rand5()*2 + rand5()*3 + rand5()*4 + rand5()*5 + rand5 ()*6)) %% 7) + 1
 

Для людей, не знакомых с R, вот упрощенная версия:

 rand7 = function(){
  г = 0
  для (я в 0:6) {
    r = r + i + rand5() + rand5()*2 + rand5()*3 + rand5()*4 + rand5()*5 + rand5()*6
  }
  вернуть г %% 7 + 1
}
 96) %%7 = 0  . Таким образом, мы можем разделить сгенерированные случайные числа на равные группы по 7.  Подробнее об этом читайте во втором методе. 

Вот все возможные комбинации:

 table(apply(expand.grid(c(outer(1:5,0:6,"+")),(1:5)*2,(1:5) *3,(1:5)*4,(1:5)*5,(1:5)*6),1,сумма) %% 7 + 1)
    1 2 3 4 5 6 7
15625 15625 15625 15625 15625 15625 15625
 

Я думаю, достаточно просто показать, что метод Адама будет работать намного быстрее. Вероятность того, что 42 или более обращений к 9(-17) ).

Теперь второй метод, почти унифицированный, но требующий 6 вызовов rand5 :

 rand7 <- function() (sum(sapply(1:6,function(i) i*rand5())) % % 7) + 1
 

Вот упрощенная версия:

 rand7 = function(){
  г = 0
  для (я в 1: 6) {
    г = г + я*rand5()
  }
  вернуть г %% 7 + 1
}
 

По сути, это одна итерация метода 1. Если мы сгенерируем все возможные комбинации, вот результат:

 table(apply(expand.grid(1:5,(1:5)*2,(1:5)) *3,(1:5)*4,(1:5)*5,(1:5)*6),1,сумма) %% 7 + 1)
   1 2 3 4 5 6 7
2233 2232 2232 2232 2232 2232 2232
 96 %% 7 = 0).  

Если аргумент метода 1 и 2 понятен, следует метод 3, который требует всего 7 вызовов rand5 . На данный момент я чувствую, что это минимальное количество вызовов, необходимое для точного решения.

Вот реализация R:

 rand5 <- function() sample(1:5,1)
rand7 <- function() (sum(sapply(1:7, function(i) i * rand5())) %% 7) + 1
 

Для людей, не знакомых с R, вот упрощенная версия:

 rand7 = function(){
  г = 0
  для (я в 1:7) {
    г = г + я * ранд5 ()
  }
  вернуть г %% 7 + 1
}
 

Распределение рандов5 будет сохранено. Если мы посчитаем, каждая из 7 итераций цикла имеет 5 возможных результатов, таким образом, общее количество возможных комбинаций равно (7 * 5) %% 7 = 0 . Таким образом, мы можем разделить сгенерированные случайные числа на равные группы по 7. Подробнее об этом читайте в методах 1 и 2.

Вот все возможные комбинации:

 table(apply(expand.grid(0:6,(1:5)),1,sum) %%7 + 1)
1 2 3 4 5 6 7
5 5 5 5 5 5 5
 93 ~ 0,004  ).