• 字典升序问题


    
    
     1 // 字典升序问题 
     2 #include <iostream>     // std::cout
     3 #include <iterator>     // std::advance
     4 #include <list>         // std::list
     5 #include <cmath>
     6 using namespace std;
     7    
     8  int f(int i,int k){  //定义:返回以第i个字母打头的k位字符串总个数 
     9   if(k==1) return 1;
    10   int sum=0;
    11   for(int j=i+1;j<=26;++j)
    12   {
    13    sum+=f(j,k-1);   } 
    14   return sum;    
    15         
    16         }
    17  
    18  int g(int k){//定义:返回k位字符串总个数 
    19    int sum1=0;
    20    for(int i=1;i<=26;++i){
    21       sum1+=f(i,k);        
    22          } 
    23    return sum1;  
    24      } 
    25  
    26  
    27  int main(){
    28    string a;//string的成员函数 
    29     cin>>a;
    30   
    31   for(int i=0;i<a.size()-1;++i)  
    32    if(a[i]>=a[i+1])   
    33   {
    34     printf ("The string must be in ascending order,please check your string!");
    35     system("PAUSE");
    36     exit (EXIT_FAILURE);
    37   }
    38   
    39   int sum0=0;
    40   int k=a.size();
    41   for(int i=1;i<=k-1;++i)
    42     sum0+=g(i);
    43     
    44   // cout<<sum0<<endl;
    45   if(k>1){ 
    46   for(int i=1;i<=a[0]-'a';++i)
    47   sum0+=f(i,a.size());
    48   //cout<<sum0<<endl;
    49   //cout<<g(1)+g(2)+g(3)+f(1,4)+f(2,4)+f(3,4);
    50    }
    51    //cout<<sum0<<endl;
    52    
    53   k--;
    54   while(k>1){
    55   int j=a[a.size()-k-1]-'a'+1;//提取当前研究位 
    56   int jj=j+1; 
    57   int jjj=a[a.size()-k]-'a';
    58   
    59   for(int i=jj;i<=jjj;++i)
    60    sum0+= f(i,k);
    61    k--;
    62 }
    63   if(a.size()==1) sum0=a[0]-'a'+1;
    64   else
    65       sum0+=a[a.size()-1]-a[a.size()-2];
    66    cout<<sum0<<endl;
    67    
    68   
    69  // cout<<sum0<<endl;
    70   
    71  //cout<<f(1,2)<<endl;
    72  // cout<<g(6)<<endl;
    73    system("PAUSE");
    74    return 1;
    75  
    76  
    77  }
    
    
    
     

         

  • 相关阅读:
    8、泛型程序设计与c++标准模板库5.函数对象
    Linux和Windows系统分区原理
    Linux命令----cd
    为什么会产生TCP/IP?
    区间 dp
    dp-划分数 (递推)
    dp-LCS(递归输出最短合串)
    dp-(LCS 基因匹配)
    位运算符
    求对数
  • 原文地址:https://www.cnblogs.com/jieforever/p/4679880.html
Copyright © 2020-2023  润新知