康托展开

来源:互联网 发布:数据帧格式是什么 编辑:程序博客网 时间:2024/05/05 15:30
/*康托展开给定一个字符串,问这是字典序中的第几小*/#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int p[15];void fac()  //求前k项的阶乘{    p[0] = 1;    p[1] = 1;    for(int i = 2;i < 25; i++)    {        p[i] = i * p[i-1];    }}int kangtuo(char *s)  //康托展开{    int len = strlen(s);    int i,j,count,sum = 1;    for(i = 0 ; i < len ; i++)    {        count=0;        for(j = i + 1 ; j < len ; j++)        {            if(s[i] > s[j])               count++;        }        sum += count * p[len-1-i];    }    return sum;}int main(){    int n;    char a[20];    fac();    scanf("%d",&n);    while(n--)    {        scanf("%s",a);        printf("%d\n",kangtuo(a));    }    return 0;}

原创粉丝点击