从 "int" 映射到相应的排列值?

Mapping from "int" to corresponding permutation value?

我今天早上运行穿过这个

基本上这个问题是关于必须为 6 个值创建排列的数据;每个运行从 1 到 38。

所以,第一个排列是

1 1 1 1 1 1      [ permutation 1 ]
1 1 1 1 1 2      [ permutation 2 ]
1 1 1 1 1 3...   [ permutation 3 ]

稍后以

结束
38 38 38 38 38 38 [ permutation 38^^6 ]

输出是由 6 个嵌套循环简单创建的,每个循环从 1 到 38;在最内层的循环中,打印 6 个循环计数器。

现在我想知道这背后的数学原理;出于好奇:

的 "function" 是什么
  1. 计算 "permutation index",给定任意排列 1 2 3 4 5 6
  2. 可能更有趣:需要一个 "index",例如 102382;并告诉我相应的排列输出

有人知道吗?

它的工作原理与改变基数(二进制、八进制或十六进制)完全一样。 第一个问题很简单: 1*38^6 + 2*38^5 + 3*38^4 + 4*38^3 +...+6*38^0 第二个反转: 102382 mod 38...递归 更新 让我们假设我们想要将 10 更改为基数 2:

10/2=5 remainder(modulus)  **0** 
5/2=2 remainder           **1**
2/2=1 remainder           **0**
1/2=0 remainder           **1**

向后是1010 general 给出了一个 M 以 B 为基数进行更改,只需将 M 除以 B ,余数将成为新基数中的数字