解码用某种奇怪的算法编码的数字



有这样一种编码算法:我们得到一些数字x,假设7923。我们在它的结尾和开头添加零 -079230.现在我们对数字求和,从右侧开始 - 第一个数字与第二个数字,第二个数字与第三个数字,依此类推。如果总和大于9,我们从中减去101移动到下一个操作。

所以以079230为例:0+3 = 33+2=52+9=119+7+1=177+0+1=8。我们的编码数字是操作的结果,因此我们以一个数字结尾:87153

现在,我们得到了编码的数字,但缺少一个数字 - 例如871X3.现在我们需要解码它 - 从中获取7923

所以简而言之 -871X3是输入,输出应该是7923.只能缺少一位数字。

这对我来说是一个奇怪的问题。我想我们需要以某种方式推断出原始数字,也许有一些回溯?原始数字的第一个数字可以是编码数字的第一个数字或该数字减去 1。但我看不到从这里到解决方案的任何路径。

看看你的算法:这只是在执行长乘法。 "编码"数字是原始乘以 11。

由于乘数大于 9,因此缺少的数字只能有一种可能性。 用模算术找到它。 输入 0 作为缺失的数字并检查:

87103 mod 11 ==> 5

现在,数字的"奇偶校验"随着位置的变化而变化。 从右边计数,偶数位置将返回缺失的数字本身(0、99、9999、999999等因子将掉落)。 奇数位置将给出加法倒数:从 11 中减去该数字得到缺失的数字。 对于给定的示例,请为每个数字尝试此操作:

87150 mod 11 ==> 8  missing digit is 3 (11-8)
87103 mod 11 ==> 5  missing digit is 5
87053 mod 11 ==> 10 missing digit is 1 (11-10)
80153 mod 11 ==> 7  missing digit is 7
7153 mod 11 ==> 3  missing digit is 8 (11-3)

表示原始数字的数字从左到右是d,c,b,a。

0 + a mod 10 = 3, so a = 3
3 + b mod 10 = 5, so b = 2
2 + c mod 10 = 1, so c = 9
9 + 1 + d mod 10 = 7, so d = 7
7 + 1 mod 10 = 8, as expected.

最新更新