Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 25

Задача "Найти целую часть log(x) по основанию 2"

10.10.2021, 11:13. Показов 1739. Ответов 10

Студворк — интернет-сервис помощи студентам
Задача: Найти целую часть log(x) по основанию 2. X входное число {0, 1, 2, 3, ..}. Можно использовать прибавление 1 и <, >, <=, >=, ==, !=, !. Есть только присваивание, цикл while, полное и неполное ветвление(if ... else). Цикл for, операторы break и continue, логические операции и массивы использовать ЗАПРЕЩЕНО.

В моем коде все работает если на вход давать степени двойки (2, 4, 8, 16, ...). Но если дать другое число, например 9, результат будет 4, хотя ответ должен быть 3 (в ответ идёт целая часть).


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x = int(input())
i = 0
j = 0
c = 0
if x != 0:
    while x != 1:
        while i + j < x:
            i = i + 1
            j = j + 1
            
        x = i
        i = 0
        j = 0
        c = c + 1
print(c)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.10.2021, 11:13
Ответы с готовыми решениями:

Задача "Найти целую часть log(x) по основанию 2"
Задача: Найти целую часть log(x) по основанию 2. X входное число {0, 1, 2, 3, ..}. Можно использовать прибавление 1 и &lt;, &gt;, &lt;=,...

Log по основанию 2
Люди, помогите!!! Нужно написать функцию (Log по основанию 2). Я делал через классы. Так что, все что можно было перегрузить...

Найти целую часть от деления
Скажите, правильно ли я написал программу нахождения целой части от деления? .model tiny .code org 100h start: X dw 15 Y...

10
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
10.10.2021, 11:30
Быстро "на коленке" сделал. Вроде работает. Проверьте.
Python
1
2
3
4
5
6
7
8
9
x = int(input())
l = 1
a = 2
while a < x:
    l += 1
    a += a
if a > x:
    l -= 1
print(l)
1
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 25
10.10.2021, 11:34  [ТС]
Спасибо, код действительно работает, но в 8 строчке вы использовали минус, а это запрещено условием
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.10.2021, 11:37
Nikita Tsarev,
Python
1
2
3
4
5
6
7
8
x = int(input())
c = 0
if x > 0:
    while x > 1:
        c = c + 1
        x>>= 1
        # Или x //= 2
print(c)
1
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
10.10.2021, 11:41
Лучший ответ Сообщение было отмечено Nikita Tsarev как решение

Решение

Цитата Сообщение от Nikita Tsarev Посмотреть сообщение
но в 8 строчке вы использовали минус, а это запрещено условием
Вот вроде с соблюдением всех условий.
Python
1
2
3
4
5
6
7
8
x = int(input())
l = 1
a = 2
while a < x:
    a += a
    if a <= x:
        l += 1
print(l)
2
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
10.10.2021, 11:47
anton78spb, или Ваш же
Python
1
2
3
4
5
6
7
x = int(input())
l = 0
a = 2
while a <= x :
    l += 1
    a += a
print(l)
1
0 / 0 / 0
Регистрация: 10.10.2021
Сообщений: 25
10.10.2021, 12:12  [ТС]
Ваше решение натолкнуло меня на верный алгоритм. Заменил вашу 5 строчку (т.к можно использовать только +1)

Решение:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
x = int(input())
l = 0
a = 2
while a <= x :
    l += 1
    m = a
    n = a
    z = 0
    while z < m:
        n += 1
        z += 1
    a = n
print(l)
Алгоритм сложение через плюс:
Python
1
2
3
4
5
6
7
m = int(input())  #первое число
n = int(input())   #второе число
z = 0
while z < m:
    n += 1
    z += 1
print(n)              #первое + второе
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
10.10.2021, 18:16
Цитата Сообщение от Nikita Tsarev Посмотреть сообщение
Цикл for, операторы break и continue, логические операции и массивы использовать ЗАПРЕЩЕНО.
- ах, в какие невыгодные условия поставили... А самое главное - функцию log - запретить забыли

Python
1
2
3
4
from math import log
 
def foo(x):
    return int(log(x)/log(2.0))
Добавлено через 16 минут
Впрочем, делить, кажется, нельзя. Ну тогда делаем свое сложение и умножение (используя только 1+):

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def add(m,n,q=0):
    if n==q:
        return m
    else:
        return add(m+1,n,q+1)
    
def mul(m,n,q=0,r=0):
    if n==q:
        return r
    else:
        return mul(m,n,q+1,r+m)
    
def ilog2(x,q=2,r=0):
    if q>x:
        return r
    else:
        return ilog2(x,mul(q,2),r+1)
А цикл while не понадобился...
0
5519 / 2872 / 571
Регистрация: 07.11.2019
Сообщений: 4,762
11.10.2021, 05:49
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Цитата Сообщение от Catstail Посмотреть сообщение
Впрочем, делить, кажется, нельзя.
А так можно?
Python
1
foo=lambda x: len(bin(x)[3:])
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38201 / 21133 / 4310
Регистрация: 12.02.2012
Сообщений: 34,740
Записей в блоге: 14
11.10.2021, 07:05
u235, ах, не совсем... Для значения x с плавающей точкой bin не работает.
0
5519 / 2872 / 571
Регистрация: 07.11.2019
Сообщений: 4,762
11.10.2021, 07:52
Catstail, так ведь по условию целые числа на входе..:
Цитата Сообщение от Nikita Tsarev Посмотреть сообщение
X входное число {0, 1, 2, 3, ..}.
, да, конечно, с нулем есть особенность..

Добавлено через 7 минут
Если возвращать для нуля None, то можно так:
Python
1
foo=lambda x: (len(bin(x)[3:]), None)[x==0]
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.10.2021, 07:52
Помогаю со студенческими работами здесь

Найти целую часть от деления X на Y
Найти целую часть от деления X на Y. помогите, пожалуйста!

Найти целую часть квадратного корня
условия: Известно,что 1+3+5+и тд.. +2k-1=k^2(k в квадрате) используя это свойство, составить блок-схему и программу на Visual Basic...

Найти целую часть и остаток от деления
Заданы два числа &lt;= 256. Найти целую часть от деления первого числа на второе и остаток деления. Записать две полученные величины одно за...

Найти целую часть и остаток от деления
Даны целые положительные числа n и k. Используя только операции сложения и вычитания, найти целую часть и остаток от деления n на k.

Найти целую часть суммы чисел
Исходные данные: x=12 a=9,5 Найти целую часть суммы чисел G, I, U


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru