- 场景:
A( 您有一个100
charset
,其中前characters
A, B, C
,后characters
-, _
。
B( encode
函数返回一个长度为 10
的字符串。
C( encode
将number
转换为charset
中的相关number
示例:A
== 0
|| B
== 1
|| C
== 2
|| -
== 98
|| _
== 99
可能性数量:100 ^ 10
= 1e+20
|| 100,000 Quadrillion
|| 100,000,000,000 Billion
.
-
问题:你如何判断
999
是iii
、_i
还是i_
? - 注意:上面概述的问题的解决方案应该适用于每种可能的情况
看起来像家庭作业...
让我们来看看我们的问题:
999 不能在我们的字符集中表示为单个字符我们可以用 3 种不同的方式对其进行编码
9 99 =>
I I I I99 9 => _I
9 99 => I_
现在。。。单独的字符集不会进行编码...在这一点上,您可能应该阅读什么是"代码"......http://en.wikipedia.org/wiki/Code
请注意,这与加密完全无关...
所以。。。我们需要一个规则集来编码/解码我们的代码
既然我们应该制定这个规则集,那么我们就可以自由选择如何处理事情,只要我们记住我们必须遵守的其他关键规则......
代码长度应为 10 个字符...从我所看到的最大值来看,否则 III 不可能是我们代码的有效示例......啊所以让我们假设我们可以删除前导零,或者在这种情况下,并进一步假设 III 和 AAAAAAAIII 是相同的
现在我们有一个给定的事实,即我们的代码有 100^10 个可能的码字,只有当长度为 10 的字符集的每个组合都是有效的码字时,才能实现
所以这三个...三、I_和_I...必须是有效的码字...
这是否意味着这三个值都是 999?
短:否
长:
如前所述,需要一个规则集来赋予代码一个含义......
由于没有给出编码规则集,我们似乎可以自由创建一个......
让我们看一下对常规基数 10 个数字进行编码的规则集......
我们有一个从 0 到 9 -> 10 位数字的字符集
数字中数字的位置包含信息...
例如 123 可以写为 1*10^10 + 2*10^1 + 3*10^0
如果我们将其转移到我们的新编码中......让我们称之为基数 100 ...它看起来像这样:
123 -> 1*100^1 + 23*100^0
=> 1=B ...23=X => 123 -> BX
999 -> 9*100^1 + 99*100^0 -> I_
但是谁说我们必须将代码中最左边的数字声明为最重要的数字呢?
如果我们不这样解释呢?
99*100^0 + 9*100^1 = 999 不也是吗?
是的。。。因此,我们也可以将其写成_I...
现在哪一个是正确的?这仅取决于我们代码的规则集...如果它说最左边的数字是最重要的数字,答案是I_......如果最右边的数字是最重要的数字,答案是_I
只要没有指定编码的规则集,这个问题的答案就无法解决......您只能尝试进行有根据的猜测,并使用与我们"正常"的 base 10 编码相同的约定......最左边的数字 = 最高有效数字 -> I_
但请记住...这是一个猜测...如果我在测试中遇到这样的问题,我会解释为什么除非指定了编码规则,否则没有答案。
TLDR:
使用所提供的信息,如果它是i_或_i,这是一个自由选择