字典序问题

a-1 b-2 ab-27 ac-28....

按升序排列,最多6位。

input       output

2                1

a                2

b

 1 #include "stdafx.h"  
 2 #include<stdio.h>
 3 #include<iostream>
 4 #include<string>
 5 using namespace std;
 6 int f(int i,int k)
 7 {/*以第i个字符开头,长度为k的字符的升序字符个数*/
 8 int sum=0;
 9 if(k==1)
10 return 1;
11 for(int j=i+1;j<=26;j++)
12 sum+=f(j,k-1);
13 return sum;
14 
15 }
16 int g(int k)
17 {//长度为k的字符串长度
18 int sum=0;
19 for(int i=1;i<=26;i++)
20 {
21 sum+=f(i,k);
22 
23 }
24 return sum;
25 
26 }
27 int calculate(string s)
28 {
29 int sum=0;
30 int k=s.length ();
31 for(int i=1;i<k;i++)
32 sum+=g(i);
33 int h=s[0]-'a'+1;;//第一个字母
34 for(int a=1;a<h;a++)
35 sum+=f(a,k);
36 for(int b=1,temp=h;b<k;b++)
37 {
38 int n=s[b]-'a'+1;
39 int length=k-b;//获取此时的长度
40 for(int j=temp+1;j<n;j++)
41 sum+=f(j,length);
42 temp=n;
43 }
44 return sum+1;
45 
46 
47 }
48 int main()
49 {
50 freopen("D://read.txt","r",stdin);
51 freopen("D://write.txt","w",stdout);
52 int i,a;
53 string s;
54 cin>>a;
55 for(i=0;i<a;i++){
56 cin>>s;
57 cout<<calculate(s)<<"\n";
58 }
59 
60 
61 
62 return 0;
63 }
View Code

 

 

 

posted @ 2015-09-07 19:46  Wei_java  阅读(269)  评论(0编辑  收藏  举报