算法找到一个数字,其中乘数为4&在给定范围内,7是最大值

时间:2012-06-05 13:53:48

标签: algorithm

我遇到了下限L和上限U的问题。
现在假设在整数X的十进制表示中,数字4显示A次,数字7显示B次。 问题是找到X的最大值为A*B的{​​{1}} 有没有有效的算法来解决它?

2 个答案:

答案 0 :(得分:5)

如果我正确理解了问题,以下情况应该有效:

  • 假设所有数字都具有相同的位数(例如,如果 L 的数字少于 U ,我们可以用0秒填写开头)。
  • Z = U - L
  • 现在我们从第一个(/最高/最左边)数字到最后一个数字。如果我们查看 i 数字,请 L (i), U (i), Z (i)和 X (i)是相应的数字。
    • 对于所有前导 Z (i)为0,我们设置 X (i)= L (i)(我们不知道)我有一个选择)。
    • 对于第一个不是0 Z (i)检查:区间中是否有4或7 [ L (i), U (ⅰ)-1]?如果是,则让 X (i)为4或7,否则让 X (i)= U (i)-1。
    • 现在用4s和7s填充 X 的其余部分,这样如果你到目前为止分配了更多的7,你选择4,反之亦然。

也许一个例子有助于理解这一点:

鉴于 U = 5000且 L = 4900。

现在 Z = 0100。

从我们设定的算法

  • X (1)= L (1)= 4(我们别无选择)
  • X (2)= U (2)-1 = 9( Z 中的第一个非0位数)
  • X (3)= 7(我们已经有了4)
  • X (4)= 4(可任意选择)

导致 X = 4974,目标为2 * 1 = 2

答案 1 :(得分:-1)

似乎你已经考虑了算法。 只需将其分解并解决每个部分。我经常写一些像你在那里写的评论,然后将它们分解,直到它们处于一个合理的大小来编写代码。

如果需要,可以进行优化。