您的位置:首页 > 其它

康托展开

2018-01-21 20:53 169 查看
/*康托展开
*求出当前排列在n个不同元素的全排列中的名次。比如213在这3个数所有排列中排第4
*序列为321,312,231,213,132,123
*数值从大到小排名
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL f[1000+5];
void init()//全排列打表
{
f[0]=1;
for(LL i=1;i<=25;i++)
{
f[i]=i*f[i-1];
}
}
LL  contor(char a[])
{
LL temp;
int len;
LL ans=0;
len=strlen(a);
//cout<<len<<endl;
for(int i=0;i<len;i++)
{
temp=0;
for(int j=i+1;j<len;j++)
{
if(a[i]>a[j])//若改为<则可得到相反的结果
{
temp++;
}
}
ans+=temp*f[len-i-1];
//cout<<ans<<endl;
}
return ans+1;
}
int main()
{
init();
char a[100];
while(scanf("%s",a)!=EOF)
{
cout<<contor(a)<<endl;
memset(a,0,sizeof(a));
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数学