逆康拓展开和康拓展开差不多,
因为X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! ,其中a[i]为当前未出现的元素中是排在第几个(从0开始)。这就是康托展开。康托展开可用代码实现。
X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0![1]
根据康拓展开 反着来,
比如 :
来个代码
int* uncantor(int x, int k)
{
int res[100];
int i, j, l, t;
bool h[100]= {0};
for (i = 1; i <= k; i++)
{
t = x / faction[k - i];
x -= t * faction[k - i];
for (j = 1, l = 0; l <= t; j++)
if (!h[j])
l++;
j--;
h[j] = true;
res[i - 1] = j;
}
return res;
}
3007



被折叠的 条评论
为什么被折叠?



