排在第几个
发布时间: 2015年10月10日 18:05 时间限制: 1000ms 内存限制: 256M
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
每行输入一行字符串,保证是a~l这12个字符的某种排列 EOF结束
输出一个整数,代表这个排列排在第几位
复制
abcdefghijkl abcdefghiklj gfkedhjblcia
1 4 260726926
康托展开
#include<stdio.h>
int main()
{
int i,fac[20],a[20],j,num,ans;
char ch[20];
fac[0]=1;
for(i=1;i<12;i++)
{
fac[i]=fac[i-1]*i;
}
while(scanf("%s",ch)!=EOF)
{
ans=0;
for(i=0;i<12;i++)
a[i]=ch[i]-'a';
for(i=0;i<12;i++)
{
num=0;
for(j=i+1;j<12;j++)
{
if(a[j]<a[i])
num++;
}
ans+=num*fac[11-i];
}
printf("%d\n",ans+1);
}
}