zoukankan      html  css  js  c++  java
  • poj1850(组合数)

    题目链接:http://poj.org/problem;jsessionid=B0D9A01EC0F1043088A37454B6CED469?id=1850

    题意:给字符串编号,该字符串必须满足由小写英文字母组成且按字典序升序排列,a编号为1,ab编号为27,输入一字符串,如果满足前面的要求则输出其编号,否则输出0。

    思路:简单组合数的题,为了方便我将输入的字符串转换成了整型数组,len表示其长度,当不满足题目要求时输出0。否则,先初始化组合数数组C,然后计算其编号也就是比它小的数的个数+1,比它小的数有两种可能:长度小于len,长度等于len,分别处理即可。

    AC代码:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int a[15],len,ans,flag=1,C[27][27];
    
    void init(){
        C[0][0]=1;
        for(int i=1;i<=26;++i){
            C[i][0]=1;
            for(int j=1;j<=i-1;++j)
                C[i][j]=C[i-1][j-1]+C[i-1][j];
            C[i][i]=1;
        }
    }
    
    int main(){
        char s[15];
        scanf("%s",s);
        len=strlen(s);
        a[0]=0;
        for(int i=0;i<len;++i)
            a[i+1]=s[i]-'a'+1;
        for(int i=1;i<=len;++i){
            for(int j=i+1;j<=len;++j)
                if(a[j]<=a[i]){
                    flag=0;
                    break;
                }
            if(!flag) break;
        }
        if(flag){
            init();
            for(int i=1;i<len;++i)
                for(int j=1;j<=26-i+1;++j)
                    ans+=C[26-j][i-1];
            for(int i=1;i<=len;++i)
                for(int j=a[i-1]+1;j<a[i];++j)
                    ans+=C[26-j][len-i];
            printf("%d
    ",ans+1);
        }
        else
            printf("0
    ");
        return 0;
    }
  • 相关阅读:
    linux下nginx+php+mysql环境搭建
    Linux下配置安装PHP环境
    什么是Apache APR
    全端之Jquery--操作属性
    全端之jQuery基本语法
    全端之Javascript(操作DOM对象二)
    全端之Javascript(DOM对象三)
    全端之Javascript(DOM对象一)
    全端之Javascript对象
    全端开发——css(操作属性补充)
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/10685851.html
Copyright © 2011-2022 走看看