我排第几个 http://acm.nyist.net/JudgeOnline/problem.php?pid=139

 

我排第几个

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

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

 
输入
第一行有一个整数n(0<n<=10000);
随后有n行,每行是一个排列;
输出
输出一个整数m,占一行,m表示排列是第几位;
样例输入
3
abcdefghijkl
hgebkflacdji
gfkedhjblcia
样例输出
1
302715242
260726926
来源
[苗栋栋]原创
上传者
苗栋栋
 
#include<stdio.h>
#include<string.h>
int fun(int k)
{
	int i,jie=1;
	for(i=1;i<=k;i++)
		jie=jie*i;
	return jie;
}
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		char a[15];
		int i,j,count,sum=1,m;
		scanf("%s",a);
		for(i=0;i<12;i++)
		{
			count=fun(11-i);
			m=0;
			for(j=0;j<i;j++)
			{
				if(a[i]>a[j])
				m++;
			}
			sum+=(a[i]-'a'-m)*count;
		}
		printf("%d\n",sum);
	}
	return 0;
}

  此题其实就是排列问题,所以用到阶乘。注意阶乘是12-1-i;为什么会有-1呢?因为你算的是已经排好一个了,还剩下那么多。

posted @ 2013-08-20 19:51  王莜轩  阅读(161)  评论(0编辑  收藏  举报