Другие языки программирования и технологии

Составить программу для решения не тривиальной математической задачи (только общую схему программы)

Задача: Какой минимальный набор гирь необходим для взвешивания на двучашевых весах груза массой до 10 кг. Точность взвешивания 1 кг. Считаем что масса взвешиваемого груза может быть 1,2,3, ..10 кг (т.е. без граммов). Минимальный набор гирь это такой набор в котором меньше количество гирь, а не их суммарная масса (хотя про суммарную массу можно было и не писать, ясно что желательно сделать ее равной 10 кг). Если удастся решить для 10 кг, предусмотреть ввод максимального веса в виде N кг будет лекго .
У гири есть три состояния: на одной чашке весов, ни на какой чашке весов, на второй чашке весов. Троичная система счисления. Достаточно гирь 1, 3, 9 кг.
А для N килограммов должно быть N больше или равно сумме весов этих гирь, то есть N больше или равно (3^m-1)/2, где m - количество гирь. Отсюда можно найти формулу для m и запрограммировать ее.
Веса разрядов троичной системы: 1,3,9,27,81... Таким же будет оптимальный набор гирь для любого веса. Остается проследить за тем, чтобы число разрядов (гирь) было достаточным для представления максимального веса.
Если заданный вес меньше максимального представимого, вес старшего разряда может быть и меньше, например, для 10 кг можно обойтись и набором 1, 3, 6.
Серж Дедяев
Серж Дедяев
32 266
Лучший ответ
2 Александр Чумовицкий
В условии было до 10 кг. Максимальный вес для трех гирь - 13 кг. Для 15 кг нужно минимум 4 гири, например, 1,3,9,27, хотя вес последней гири может быть и меньше (хватит и двух килограммов).
Марат Валеев
Марат Валеев
56 928
а масса гирь какая? можно сделать одну гирю той же массы, что и груз будь то 10 кг или 1кг.

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

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

А вообще можно использовать алгоритм подобного образа:
Берем максимальный вес гири и складываем, пока не будет превышен лимит (т. е. пока масса гирь не станет выше массы груза) если так, то плюсуем гирю меньшей массы и опять проверяем, если опять выше то берем еще меньшей массы.
До 10 кг достаточно 1, 2, 3, 5 кг. 3-х штук достаточно для получения 10кг (2+3+5 = 10), но не достаточно для получения всех значений от 1 до 10. Достаточным является набор ( 1, 2, 3, 5 )
используя ряд (1 гиря+2 гиря+...+последняя гиря+1)+последняя гиря
Алгоритм (на примере для 10кг) :
1) 1кг не достаточно для взвешивания 10 кг (1<10)
2) используя ряд считаем следующую гирю (1+1)+1=3кг
3)максимально заверяемый вес (1+3)<10кг, значит алгоритм повторяем.
4) получаем 8кг гирю (макс измеряемый вес >10) алгоритм заканчиваем
5) считаем сколько гирь использовали (1, 3, 8) и получаем ответ 3.

написал коряво, задавайте вопросы
---
можно подробней)
как писал выше (1 гиря (1кг) +2 гиря (она же последняя 3 кг) + 1)+3 кг=(1+3+1)+3=8кг
соответственно если бы нам не хватало этого набора следующей была бы: (1+3+8+1)+8=21кг
---
2 Krab: а как замерить 15кг?