zoukankan      html  css  js  c++  java
  • 字母组合

    字母A,B,C的所有可能的组合(按字典顺序排序)是:A, AB,ABC,AC,B,BC,C 每个组合都对应一个字典顺序的序号,如下所示:

                1 A

                2 AB

                3 ABC

                4 AC

                5 B

                6 BC

                7 C

          找出某个字母组合的字典序号。例如,上例中AC的字典序号是4。

          注:假设某个字母组合为X1X2X3…XK,保证X1<…

          输入:输入包括2行:

          第一行:N,表示字母组合由字母表中前N(N<=26)个字母组成;

          第二行:某一个字母组合,都是大写字母;

          输出:该字母组合的序号;

          输入样例:

      3

           AB

          输出样例: 2

    分析:比较简单的一道题,枚举这个字符串的每一位,看看比这一位小的能组成的字符串有多少个.比如一个字符串CD,当前枚举到了第一位,那么就统计第一位放A/B能够成多少个字符串,统计完后再来枚举下一位,以此类推,方法和poj1850差不多.

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    int n, len, c[30][30], num[30], ans;
    char s[30];
    
    int main()
    {
        scanf("%d", &n);
        scanf("%s", s + 1);
        len = strlen(s + 1);
        c[0][0] = 1;
        for (int i = 1; i < 30; i++)
        {
            c[i][0] = 1;
            for (int j = 1; j < 30; j++)
                c[i][j] = c[i - 1][j] + c[i - 1][j - 1];
        }
        for (int i = 1; i <= len; i++)
            num[i] = s[i] - 'A' + 1;
        for (int i = 1; i <= len; i++)
        {
            int ch;
            if (i == 1)
                ch = 1;
            else
                ch = num[i - 1] + 1;
            while (ch < num[i])
            {
                for (int j = i + 1; j <= n; j++)
                ans += c[n - ch][j - i];
                ans++;
                ch++;
            }
            if (ch == num[i] && i != len)
            ans++;
        }
        ans++;
        printf("%d
    ", ans);
    
        return 0;
    }
  • 相关阅读:
    Django tutorial part2
    Django tutorial part1
    webpy使用mysql数据库操作(web.database)
    Sicily 1031. Campus 解题报告
    Sicily 1321. Robot 解题报告
    Sicily 1940. Ordering Tasks 解题报告
    Sicily 1936. Knight Moves 解题报告
    Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask
    Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
    Java多线程19:定时器Timer
  • 原文地址:https://www.cnblogs.com/zbtrs/p/7954226.html
Copyright © 2011-2022 走看看