Тема: K - нульових бiтiв. Мова програмування Python.

Знайдiть будь-яке число, яке не менше за 10n i у бiнарному записi якого є вiдрiзок довжиною рiвно з k нулiв, що з обох сторiн оточений одиницями.

Наприклад, число 16310 = 101000112 мiстить у собi вiдрiзок iз трьох нулiв, оточений одиницями. Також це число мiстить у собi вiдрiзок з одного нуля, але не мiстить з двох чи чотирьох нулiв.

Аналіз
Переведемо кілька числ у двійковий вид:

11 - 1011;
213- 11010101;
210 - 11010010;
214 - 11010110.
З наведеного прикладу ми можемо побачити, що першою цифрою завжди буде 1, а остання якщо число у десятковій системі парне то у остання цифра у двійковій системі рівна 0 і якщо не парне то 1.

Тобто ми будемо розглядати тільки непарні числа у десятковому поданні.

Алгоритм
1. Якщо уведене число відповідає усім вимогам: не менше за 10n і є непарне.
2. Переводимо його у двійковий вид.
3. Переводимо отримане подання у двійковому виді у рядковий тип, якщо потрібно.
4. Створюємо рядок з k нулiв.
5. Використовуємо стандартну функцію пошуку входження підрядка що містить k нулiв.

2 Востаннє редагувалося ping (02.12.2019 19:24:22)

Re: K - нульових бiтiв. Мова програмування Python.

ну, наразі просто чудово.
починайте писати код.
щоб його сюди покласти - використовуйте тег `code`
викладайте що вийде, хоч би навіть тільки 1-й крок.
якщо не знаєте  чого - так і питайте - наприклад - як перевести десяьткове число в двійковий вигляд у пітоні3

приклад коду:

print(Hello!')
Подякували: koala, taraskristina19992

3

Re: K - нульових бiтiв. Мова програмування Python.

Якщо чесно, то навіть не знаю з чого почати(

4

Re: K - нульових бiтiв. Мова програмування Python.

taraskristina1999 написав:

Якщо чесно, то навіть не знаю з чого почати(

Ви хочете сказати, що "Аналіз" і "Алгоритм" не ви писали, а це частина завдання?
Почніть з підручника.

5

Re: K - нульових бiтiв. Мова програмування Python.

taraskristina1999 написав:

Якщо чесно, то навіть не знаю з чого почати(

ну шось таке:

import sys

# 1. Якщо уведене число відповідає усім вимогам: не менше за 10n і є непарне.
n = 4 # задаємо n
number = input()
if number < 10 * n:
    print('число  менше 10n')
    sys.exit(1)

далі - перевірка на парність і т.п.
пробуйте і задавайте питання на те, що спробували, якщо не вдалося.

Подякували: taraskristina19991

6

Re: K - нульових бiтiв. Мова програмування Python.

Підкажіть як мені "Створити рядок з k нулів"

import sys
a = int(input("Введіть степінь числа 10: "))
n = ""
number = int(input())
while (number >= pow(10, a) and number % 2 != 0):
    while (number > 0):
        y = str(number % 2)
        n = y + n
        number = int(number / 2)
    m = str(n) 
print(m)

7 Востаннє редагувалося ping (02.12.2019 20:58:41)

Re: K - нульових бiтiв. Мова програмування Python.

"Створити рядок з k нулів"

k_zero_string = '0' * k
Подякували: koala, taraskristina19992

8

Re: K - нульових бiтiв. Мова програмування Python.

Вибиває помилку, не можу зрозуміти в чому проблема

import sys
a = int(input("Введіть степінь числа 10: "))
n = ""
number = int(input("Введіть число: "))
if (number >= pow(10, a) and number % 2 != 0):
    while (number > 0):
        y = str(number % 2)
        n = y + n
        number = int(number / 2)
    m = str(n)
    k = int(input("Введіть кількість нулів: "))
    k_zero_string = '0' * k
    print(m.index(k))
print(m)

9

Re: K - нульових бiтiв. Мова програмування Python.

яку помилку? наведіть її

Подякували: koala, taraskristina19992

10

Re: K - нульових бiтiв. Мова програмування Python.

Спробував пройтися алгоритмом. Гм... це вам викладач на перерві надиктував? Тоді ще можна зрозуміти, бо це лише дуже приблизна спроба щось описати.
Контрприклад до Аналізу: n=1, k=2, 10010(2)==18(10) містить "1001", але є парним. Тобто парні теж треба розглядати.

Спробуйте описати словами, як ви шукатимете відповідь для, наприклад, n=3 і k=5. Не треба коду - уявіть собі, що вам дали цю задачу на математиці. Якщо запишете, підкажу, як це закодувати.

Подякували: leofun011

11

Re: K - нульових бiтiв. Мова програмування Python.

TypeError                                 Traceback (most recent call last)
<ipython-input-6-b59641a57def> in <module>()
     11     k = int(input("Введіть кількість нулів: "))
     12     k_zero_string = '0' * k
---> 13     print(m.index(k))
     14 print(m)

TypeError: Can't convert 'int' object to str implicitly

12

Re: K - нульових бiтiв. Мова програмування Python.

m - стрічка, str
k - ціле число, int
метод m.index приймає параметром str, а не int
Компілятор вам каже, що не може перетворити int у str неявно. Перетворюйте явно.

13 Востаннє редагувалося ping (03.12.2019 22:18:02)

Re: K - нульових бiтiв. Мова програмування Python.

koala написав:

m - стрічка, str
k - ціле число, int
метод m.index приймає параметром str, а не int
Компілятор вам каже, що не може перетворити int у str неявно. Перетворюйте явно.

він шукає входження k_zero_string, якщо я зрозумів вірно завдання
тоді треба

    k_zero_string = '0' * k
    print(m.index(k_zero_string))

p.s.
так мен ібільше подобається, якщо нам не ттреба конкретики про місце входження

    k_zero_string = '0' * k
    print(k_zero_string in m)
Подякували: taraskristina19991

14

Re: K - нульових бiтiв. Мова програмування Python.

Читаємо уважно умову.
Знайдiть будь-яке число, яке не менше за 10n i у бiнарному записi якого є вiдрiзок довжиною рiвно з k нулiв, що з обох сторiн оточений одиницями.

Отже, ідея для алгоритму:
1. Знаходимо 10n (я так розумію, це малося на увазі 10**n).
2. Переводимо в двійкову форму.
3. Дописуємо в кінці 100...01 (k нулів).
4. Перетворюємо назад у число, виводимо.
Отримане число гарантовано буде більшим за 10**n і міститиме потрібну комбінацію нулів і одиниць. Оскільки жодних інших обмежень на число не накладалося (на кшталт "найменше"), це число буде відповідати умовам задачі.
Функція переведення в стрічку з двійковою формою у Python - bin (щоправда, там ще додаткове 0b на початку додається, але це не заважає). Функція переведення стрічки з двійковою формою числа у число - int з другим параметром 2. Наприклад,
>>> bin(27)
'0b11011'
>>> int('0b100001',2)
33

Тепер зможете запрограмувати?