我排第几个
- 描述
-
现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?
- 输入
- 第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列; 输出 - 输出一个整数m,占一行,m表示排列是第几位; 样例输入
-
3 abcdefghijkl hgebkflacdji gfkedhjblcia
样例输出 -
1 302715242 260726926
- 第一行有一个整数n(0<n<=10000);
#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
int w(int y) //求阶乘
{
int i,k=1;
for(i=1;i<=y;i++)
{
k*=i;
}
return k;
}
int main()
{
int m,n,i,j,k,x,y;
char s[13];
scanf("%d",&n);
getchar();
while(n--)
{
gets(s);k=0;
for(i=0;i<12;i++)
{
m=0;
for(j=0;j<i;j++)
{
if(s[i]>s[j])
m++;
}
x=s[i]-97-m; //求比s[i]小的除了以用的个数
y=11-i; // 求s[i] 后面的位数
k+=x*w(y);
}
printf("%d\n",k+1);
}
//system("pause");
return 0;
}
主要用到“康拓展开原理”