【发布时间】:2014-01-25 02:38:32
【问题描述】:
在我的应用程序中,我需要确定用户可以在杠铃上加载哪些板以达到所需的重量。
例如,用户可能会指定他们正在使用 45 磅的酒吧并使用 45、35、25、10、5、2.5 磅的盘子。对于像 115 这样的重量,这是一个很容易解决的问题,因为结果与普通盘子完全匹配。 115 - 45 / 2 = 35。
所以这里的目标是找到用户需要达到重量的最大到最小的板(从选择中)。
我的启动方法看起来像这样...
-(void)imperialNonOlympic:(float)barbellWeight workingWeight:(float)workingWeight {
float realWeight = (workingWeight - barbellWeight);
float perSide = realWeight / 2;
.... // lots of inefficient mod and division ....
}
我的思考过程是首先确定每边的重量是多少。总重量 - 杠铃的重量 / 2。然后确定所需的最大到最小的盘子是多少(以及每个的数量,例如 325 将是 45 * 3 + 5 或 45、45、45、5。
搞砸了 fmodf 和其他一些想法,我想到可能有一种算法可以解决这个问题。我正在研究 BFS,并承认它在我的头上,但仍然愿意试一试。
了解有关在哪里查看算法或代码示例的任何提示。
【问题讨论】:
-
您不需要算法,因为您已经有了算法。做起来很简单,只用最大的重量,直到剩下的小于那个,然后继续下去,用5个点的重量结束。
-
@JamesBlack 这不起作用。这是一个最小硬币问题(使用 DP 解决)。您不能按照您所说的程序进行操作,例如,假设所需的总重量 = 123,而目前的重量是 50,41,1。根据您的解决方案,您将有 123 = 50*2+23*1,(共 25 项),但 123 = 41*3,3 是最好的解决方案。您必须使用动态编程来获得它。 stackoverflow.com/questions/4247662/…
-
塔内克,桑图。这很好地描述了问题,你的链接让我开始解决它。
标签: ios objective-c algorithm