看着这篇文章自己尝试的写了康托展开https://blog.csdn.net/update7/article/details/56681789
#include <iostream>
using namespace std;
int main()
{
int n;
int k;
int a[21] = {1,1};
int ans = 0;
for(int i = 2; i <21; ++i) //把a数组赋值为 1! ,2!, 3!, 4!.....
{
a[i] = a[i - 1]*i;
}
while(cin >> n)
{
int comf[21] = {0}; //确定 comf[n]中的n这个数是否已经在前面的数列中出现;
while(n--)
{
int y = 0;
cin >> k;
comf[k] = 1; //输入k以后把k标记为已经出现过
for(int j = 1;j < k ; ++j)
if(!comf[j]) //检查所有比k小的数是否出现
++y;
ans += y * a[k - 1];
}
cout << ans + 1 << endl;
ans = 0;
}
return 0;
}