如何创建从 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/