Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

Нарезка колбасы бинарным поиском

20.12.2019, 17:03. Показов 3034. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Поварёнок Вася работает первый день. В его трудовые функции входит нарезка колбасы на кусочки различного веса. Вася пока не может отрезать колбасу "на глаз", он придумал безотказный способ нарезки колбасы. Зная вес всей палки колбасы и делая предположение, что плотность колбасы одинаковая, Вася режет колбасу ровно пополам и каждый получившийся кусочек, пока не получит кусочки такого веса, из которых сможет сложить требуемый вес с погрешностью 0,001.

Входные данные
Первая строка содержит два числа: N — вес палки колбасы и M — вес колбасы в блюде. Гарантируется, что 0 < N, 0 < M и 2*M ≤ N.

Выходные данные
Первая строка — суммарное минимальное количество получившихся кусочков колбасы после нарезки
Вторая строка — список весов кусочков,отсортированных по убыванию, сумма которых равна M.

Пример
Code
1
2
3
4
16 2
 
4
2
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.12.2019, 17:03
Ответы с готовыми решениями:

Решение бинарным поиском
Разработать и отладить программу, которая реализует алгоритмы поиска элементов, которые присутствующие в массивах А и В в единственном...

Вставка с бинарным поиском
Решение должно содержать отдельную функцию для сортировки массива и для проверки массива на упорядоченность, функцию для чтения массива из ...

Проблема с бинарным поиском
Доброго времени суток, форумчане! Помогите с бинарным поиском. При повторяющихся элементах он выводит только последний, а мне нужно, чтобы...

6
55 / 40 / 18
Регистрация: 16.12.2019
Сообщений: 149
20.12.2019, 18:44
Похоже на задачу о Рюкзаке \ Ранце.
Как указание пути:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
n, m = map(float, input().split())
 
a = []
while n > 0.001: 
    n /= 2
    a.append(n)
 
can_be = {0}
for piece in a:
    if piece <= m:
        can_be |= set((p + piece for p in can_be if p + piece <= m))
 
print(max(can_be))
PS. И из условия непонятно, могут ли дублироваться кусочки (вторая часть палки).
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
20.12.2019, 18:45
Рыжий Лис, что-то я вообще не понял суть задачи, такая вот фигня вышла:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
n=16
m=2
eps=0.001
i=1
s=0
flag=False
cnt=1
x=0
while flag==False:
    s=0
    i*=2
    for j in range(i):
        s+=n/i
        if abs(s-m) <= eps:
            flag=True
            break
    cnt+=1
print(i,cnt)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.12.2019, 18:58  [ТС]
codcw, колбасу надо порезать Смотри палка длиной (массой) 16. Нужно отрезать 2:

16
8 8
4 4 8
(2) 2 4 8

Получилось 4 кусочка колбасы и в ответ мы кладём один кусочек весом 2 (помечен скобками).

Ещё пример:
ввод
Code
1
16 3
вывод
Code
1
2
5
2 1
16
8
4 4 8
2 2 4 8
1 (1) (2) 4 8

А вот если колбаса режется не на целые кусочки...

Добавлено через 5 минут
Что-то у меня такое ощущение, что задача сводится к вычислению логарифма по основанию двойки и нахождению суммы чисел в степени 2.
0
 Аватар для codcw
815 / 527 / 214
Регистрация: 22.12.2017
Сообщений: 1,495
20.12.2019, 19:02
Рыжий Лис, резать самый крайний элемент? и обязательно ли "резать", или можно подсчитать арифметически?

Добавлено через 3 минуты
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Что-то у меня такое ощущение, что задача сводится к вычислению логарифма по основанию двойки и нахождению суммы чисел в степени 2.
правильное ощущение
0
55 / 40 / 18
Регистрация: 16.12.2019
Сообщений: 149
20.12.2019, 21:53
Рыжий Лис,
Возможно верное решение, требующее доработки\оптимизации:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def get(i, z):
    b = []
    if z + a[i] < x:
        z += a[i]
        b.append(a[i])
        if z >= y:
            return(b)
    if i < q:
        b.extend(get(i + 1, z))
    return(b)
 
n = 16
m = 3
 
a = []
while n > 0.001: 
    n /= 2
    a.append(n)
 
q = len(a) - 1
x = m + 0.001
y = m - 0.001
r = get(0, 0)
 
# + вторая половина + 1
print(a.index(r[-1]) + 1 + 1)
print(*r)
print(sum(r))
n = 16, m = 2.76:

14
2.0 0.5 0.25 0.0078125 0.001953125
2.759765625
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
20.12.2019, 23:11
Лучший ответ Сообщение было отмечено Рыжий Лис как решение

Решение

может так, фз
Python
1
2
3
4
5
6
7
8
9
10
11
12
n, m = map(float, input().split())
a = []
k = 1
eps = 0.001
while m >= eps:
    n /= 2
    k += 1
    if n - m <= eps:
        m -= n
        a += [n]
print(k)
print(*a)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.12.2019, 23:11
Помогаю со студенческими работами здесь

Построение бинарным поиском
Добрый день. Я написал программу для нахождения Объединения, пересечения, разности и симметрической разности 2-х списков, причём первый...

корень числа с бинарным поиском
В общем что имеем. Я знаю что на форуме висит похожая тема и само задание не вызывает трудности, но есть один нюанс. Задачу нужно...

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

Быстрая сортировка массива бинарным поиском
в c++

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
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
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru