網上有答案是用了stl做的,這個是用 的康拓函式,用的是數學知識。
很經典的就是逆康拓函式裡面根據某一位數的數怎樣由 bi小的比它的個數 來推算出來(用了乙個vst陣列)。
#include
using namespace std;
const int maxn=1001;
int fac = ;
int kangtuo(int n,char a)
sum+=t*fac[n-i-1];
}return sum+1;
} int main()
//實現康拓函式的逆運算 hdu 1027(n小的時候可以解決)
#include
#include
#include
using namespace std;
int fac = ;
int n,m;
const int maxn=1001;
char a[maxn];
void reverse_kangtuo(int n,int m)//m是m位,n是到n
;for(i=0;iint main()
return 0;
}//利用next_permutation
#include
#include
using namespace std;
int main()
康拓展開 康拓逆展開
康拓展開 已知有一集合a包含n個不同的元素,其中 k1,k2,k3.kn 2 是a的乙個排列。假設此排列為a按字典序從小到大排列的排列中的第x個排列,則x a1 n 1 a2 n 2 an 2 1 an 1 0 其中ai為ki 1.kn中比ki小的數的個數 例如 3214是1234的第2 3 1 2...
康托展開及康拓逆展開
康拓展開 把乙個整數x展開成如下形式 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 其中a i 為 當前元素 在 所有未出現的元素 中排在第i個 從0開始 並且0 a i 為了更好的理解康托展開,舉個例子 序列3 4 6 2 1 7 5 8 0 總共有9個數 第乙個...
康拓展開與康拓逆展開
x a n n 1 a n 1 n 2 a i i 1 a 1 0 其中a i 為當前未出現的元素中是排在第幾個 從0開始 這就是康托展開。公式把乙個整數x展開成如下形式 x a n n 1 a n 1 n 2 a i i 1 a 2 1 a 1 0 其中a i 為 當前元素 在 所有未出現的元素 ...