我排第几个
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
现在有"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> long int fac[12] = {1,1}; int num; char a[13]; void find(int len); int main() { int i, n; int len; for(i = 2; i < 12; i++) { fac[i] = fac[i -1] * i; } scanf("%d",&n); while(n--) { num = 0; memset(a, '0', sizeof(a)); scanf("%s",a); len = strlen(a); find(len); printf("%d\n",num + 1); } return 0; } void find(int len) { int i,j,temp, m; for(i = 0; i < len-1;i++) { temp = a[i] - 97;//temp记录比它小的数; for(j = 0; j < i; j++) { if(a[j] < a[i]) temp--; } num += temp*fac[len -1-i]; } }