题意就是说给一列序列...其顺序是 1 : a .. 2 : b ... 26 : z ... 27 : ab..28 : ac.....51 : az...52 : bc...类似这样...其中的字符串都是每一位比前一位大...最长为vwxyz...给出一个字符串..求出其在队列中的序列号...
这道题就是用一个排列组合....比如求 bdf ... 求出1位和2为总共有多少个..然后每一位就依次求出前一位这么长能排多少位...
例如 bdf = C ( 26 , 1 ) + C ( 26 , 2 ) + C ( 25 , 2 ) + C ( 23 , 1 ) + C ( 21 , 0 )
1位的总数 2位的总数 a**的总数 c*的总数 e的总数
已这种思想来写就可以....
Program:
#include<iostream>
using namespace std;
char s[10];
int getdata(int a,int b)
{
int i,ans=1;
for (i=0;i<b;i++) ans*=(a-i);
for (i=1;i<=b;i++) ans/=i;
return ans;
}
int getanswer()
{
int i,j,l,ans;
l=strlen(s);
for (i=1;i<l;i++)
if (s[i]<=s[i-1]) return 0;
ans=1;
for (i=1;i<l;i++) ans+=getdata(26,i);
for (i=1;i<=s[0]-'a';i++)
ans+=getdata(26-i,l-1);
for (i=1;i<l;i++)
for (j=s[i-1]-'a'+2;j<=s[i]-'a';j++)
ans+=getdata(26-j,l-i-1);
return ans;
}
int main()
{
while (gets(s)) printf("%d\n",getanswer());
return 0;
}