计算达到特定数量所需的最小操作数

时间:2014-04-09 18:16:48

标签: algorithm

我应该如何为此挑战实施算法?

有三个整数,A,B和C.

您的计算器从数字1开始,它必须达到C.为此,您可以执行两项操作:

  • 将您的数字乘以A(如果结果超过4位数,则结果为1)。
  • 将您的号码除以B(整数除法)。

您必须返回达到C所需的最少操作次数。

此外,您的计算器只有四位数字,因此您可以预期A,B和C输入最多为9999。

示例:

A = 2, B = 3, C = 10

1*A = 2 
2*A = 4 
4*A = 8 
8*A = 16 
16/B = 5 
5*A = 10

因此结果将是6步。


我曾经通过强制结果来做到这一点(尝试很多组合并抓住步数最少的那个)。那太傻了。

1 个答案:

答案 0 :(得分:6)

这可以缩小为图G=(V,E)上的 shortest path problem ,其中顶点V={0,1,2,...,9999}E = { (x,y) | y = x*a, y< 10,000 or y = x /b } U { (x,1) | x*a > 10,000 }

现在,您需要找到从1到目标的最短路径。可以通过运行BFSA* Search algorithm(如果您找到一个好的启发式)或bi-directional search(基本上来自目标和来自源的BFS)来完成它< / p>

修改
(注意:原始答案包含一些不同的边缘设置,这符合稍微不同的问题。无论哪种方式 - 主要想法仍然存在)