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

时间:2016-09-08 09:18:00

标签: algorithm permutation

今天早上我遇到了这个question

基本上,这个问题是关于必须为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个循环计数器。

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

的“功能”是什么
  1. 计算“排列索引”,给出任何排列1 2 3 4 5 6
  2. 可能更有趣:它采用“索引”,例如102382;并告诉我相应的排列输出
  3. 任何想法?

1 个答案:

答案 0 :(得分:3)

它的作用与基数的变化完全相同(二进制,八进制或十六进制)。 第一个问题只是:  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,其余的将是新基数中的数字