algorithm - 如何创建从 3 个数字到 3 个完全不同的数字(基数 10)的一对一映射?

标签 algorithm mapping

如何创建从 3 个数字到 3 个完全不同的数字(基数 10)的一对一映射?

订单很重要。给定的字符串具有不同的数字。

例如,给定012,得到345。结果字符串不能包含原始字符串中的数字。对于所有 10 * 9 * 8 = 720 种可能性,映射应该是一对一的。

我的一些数学想法,例如对数字进行加法或减法,似乎都允许重复数字。

最佳答案

找到最小的 k,使得将 k 添加到每个数字 mod 10 会导致一组不相交的数字。去做。逆运算是从每个数字模 10 中减去相同的 k。

正确性证明草图:所有算术运算都是模 10。第一个观察是总是存在一个合适的 k。 k 有 10 种选择,但只有 9 种可能的冲突,其中冲突由输入中的一个位置和输出中的一个位置组成,它们包含相同的数字。每个冲突都由 k 的一个选择触发。第二个观察是,给定一个输入 (a, b, c),k 的值在输入 (a + d, b + d, c + d) 中是不变的,其中 d 是一个数字。由此可见,逆运算确实是逆运算(因为 k 的值被确定为相同),因此这两个运算都是双射。

关于algorithm - 如何创建从 3 个数字到 3 个完全不同的数字(基数 10)的一对一映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683018/

相关文章:

javascript - 为什么 Array.isArray 算法是 ES5 执行类型检查?

python - 基于索引、列名和原始值映射 Pandas 数据框?

mapping - 无法在 Vim 中映射 <C-J>

r - 将数据框中的列添加到 SpatialPolygon 数据框中

class - 原则 2 代理类中的 EntityNotFoundException

arrays - 找到排序数组的索引,使得 a[i]+a[j]=x

algorithm - 计算移动目标偏移量的最佳方法

c# - 如何创建自定义值注入(inject)以将我的实体映射到我的 View 模型?包括尝试

algorithm - 整数序列的最佳压缩算法

在数字序列中查找最小非零幅度的算法