题意就是说给一列序列...其顺序是 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; }