我陷入了一个问题,其中下界L
和上限U
给出。
现在假设整数的十进制表示形式X
出现数字 4A
次数和数字 7 出现B
times.
问题是要找到X
其中最大值为A*B
for L<=X<=U
.
有什么高效的算法可以解决吗?
如果我正确理解了这个问题,以下应该有效:
- 假设所有数字具有相同的位数(例如L位数少于U,我们可以在开头填充 0 s)。
- Let Z = U - L.
- Now we go from the first (/highest/leftmost) digit to the last one. If we are looking at the i th digit, let L(i), U(i), Z(i) and X(i) be the corresponding digit.
- 对于所有领先的Z(i) 为 0,我们设置X(i) = L(i)(我们别无选择)。
- 对于第一个不为 0Z(i) 检查:区间 [ 中是否有 4 或 7L(i), U(i)-1]?如果是的话让X(i) 是 4 或 7,否则令X(i) = U(i)-1.
- 现在填写其余部分X4 和 7,如果您到目前为止已经分配了更多 7,则选择 4,反之亦然。
也许一个例子可以帮助理解这一点:
Given U= 5000 和L = 4900.
Now Z = 0100.
从我们设定的算法来看
-
X(1) = L(1) = 4(我们别无选择)
-
X(2) = U(2)-1 = 9(第一个非 0 数字Z)
-
X(3) = 7(我们已经有 4)
-
X(4) = 4(可任意选择)
导致X= 4974 目标为 2*1=2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)