字典序问题
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 }