profile
Опубликовано 5 лет назад по предмету Информатика от rrimovna

Скажите,как решать такие задания? Научите,пожалуйста.

6 (№ 7) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите такое наименьшее число N, для которого результат работы алгоритма больше 125. В ответе это число запишите в десятичной системе счисления.

  1. Ответ
    Ответ дан archery
    Ответ 31

    код на Ruby 22

    for i in 1..40
        s = i.to_s(2)
        k = 0
        s.chars().each {|c| k += 1 if c == "1" }
        s += (k % 2).to_s + "0"
        p [i, s, s.to_i(2)]
    end

    вывод
    [1, "110", 6]
    [2, "1010", 10]
    [3, "1100", 12]
    [4, "10010", 18]
    [5, "10100", 20]
    [6, "11000", 24]
    [7, "11110", 30]
    [8, "100010", 34]
    [9, "100100", 36]
    [10, "101000", 40]
    [11, "101110", 46]
    [12, "110000", 48]
    [13, "110110", 54]
    [14, "111010", 58]
    [15, "111100", 60]
    [16, "1000010", 66]
    [17, "1000100", 68]
    [18, "1001000", 72]
    [19, "1001110", 78]
    [20, "1010000", 80]
    [21, "1010110", 86]
    [22, "1011010", 90]
    [23, "1011100", 92]
    [24, "1100000", 96]
    [25, "1100110", 102]
    [26, "1101010", 106]
    [27, "1101100", 108]
    [28, "1110010", 114]
    [29, "1110100", 116]
    [30, "1111000", 120]
    [31, "1111110", 126]
    [32, "10000010", 130]
    [33, "10000100", 132]
    [34, "10001000", 136]
    [35, "10001110", 142]
    [36, "10010000", 144]
    [37, "10010110", 150]
    [38, "10011010", 154]
    [39, "10011100", 156]
    [40, "10100000", 160]


    1. Ответ
      Ответ дан archery
      Ответ в самом верху
    2. Ответ
      Ответ дан archery
      а если аналитически, то берем число 126 (больше 125) = "1111110", откидываем последние две цифры "11111" = 31, превращаем его по алгоритму, если ответ нам подходит, то радуемся, если не подходит, то превращаем по алгоритму число 31+1 = 32 и тд
    3. Ответ
      Ответ дан Аккаунт удален
      Да-да, именно так оно и решается
    4. Ответ
      Ответ дан Аккаунт удален
      И да, Вы правы, ответ "вверху" я не увидел, потому что в школах обычно его пишут внизу...
    5. Ответ
      Ответ дан rrimovna
      Спасибо)
  2. Ответ
    Ответ дан Аккаунт удален
    Следующее число, большее 125₁₀, равно 126₁₀ или 1111110₂
    Посмотрим, может ли оно получиться по заданному алгоритму.
    На шаге 2а определяется "бит четности" путем подсчета количества единиц в двоичной записи числа. Если оно четно, к записи числа справа дописывается 0, если нечетно - единица.
    На шаге 2б повторяются действия предыдущего шага.
    Отбросим две правые цифры в записи 1111110₂ и посмотрим, как на получившемся числе работает предложенный алгоритм.
    1111110 ⇒ 11111, число единиц нечетное, дописываем 1, получаем 111111, теперь число единиц четное, дописываем 0 и получаем 1111110, т.е. как раз то число, которое у нас было при переводе 126 в двоичную систему счисления.
    А исходное число - это 11111₂ = 31₁₀
    Ответ: 31


    1. Ответ
      Ответ дан rrimovna
      Спасибо)
Самые новые вопросы