我陷入了一个给出下限L
和上限的问题U
。
现在假设在整数X
数字 4 出现A
次数和数字 7 出现B
次数的十进制表示中。
问题是找出X
哪个具有最大值A*B
for L<=X<=U
。
有没有有效的算法来解决它?
问问题
279 次
2 回答
5
如果我正确理解了这个问题,以下应该可以工作:
- 假设所有数字都具有相同的位数(例如,如果L的位数少于U,我们可以只用 0 填充开头)。
- 让Z = U - L。
- 现在我们从第一个(/最高/最左边)数字到最后一个数字。如果我们正在查看第i个数字,则令L (i)、U (i)、Z (i) 和X (i) 为对应的数字。
- 对于所有为 0 的前导Z (i),我们设置X (i) = L (i)(我们别无选择)。
- 对于第一个非 0 Z (i) 检查:区间 [ L (i), U (i)-1]中是否有 4 或 7 ?如果是,则令X (i) 为 4 或 7,否则令X (i) = U (i)-1。
- 现在用 4s 和 7s 填充X的其余部分,这样如果您到目前为止分配了更多的 7s,则选择 4s,反之亦然。
也许一个例子可以帮助理解这一点:
给定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
于 2012-06-06T12:22:09.550 回答
-1
看来您已经考虑好了算法。只需将其分解并解决每个部分。我通常会写一些像你在那里所做的评论,然后将它们分解,直到它们达到合理的大小以编写代码。
当你让它工作时,如果需要,你可以优化它。
于 2012-06-05T14:08:42.587 回答