首页 > 代码库 > NYOJ 139 我排第几个?

NYOJ 139 我排第几个?

我排第几个

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

现在有"abcdefghijkl”12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的?

输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
样例输出
1
302715242
260726926
AC码:
#include<stdio.h>
const int f[12] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800, 39916800};
int main()
{
	int i,j,n=0,sum=0,count=0,num[12];
	char ch[13];
	scanf("%d",&n);
	while(n--)
	{
		scanf("%s",ch);
		sum=1;
		for(i=0;i<12;i++)
		{
			num[i]=ch[i]-96;
			count=num[i]-1;
			for(j=i-1;j>=0;j--)
			{
				if(num[j]<num[i])
					count--;
			}
			sum+=count*f[11-i];
		}
		printf("%d\n",sum);
	}
	return 0;
}