zoukankan      html  css  js  c++  java
  • TX2017秋招笔试题之编码

    问题描述:

    假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下:

    a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy

    其中a的Index为0,aa的Index为1,aaa的Index为2,以此类推。 编写一个函数,输入是任意一个编码,输出这个编码对应的Index.

    输入描述:
    输入一个待编码的字符串,字符串长度小于等于100.

    输出描述:

    输出这个编码的index
    示例
    输入
      baca
    输出
      16331
    ————————————————————————————————————————————

    求一个字符串的编码,只需要求出来比这个字符串小的组合数即可,举个例子,求比bcde小的组合有多少个:
    (1)串长为1:
    第1位可以选[a,b),再加上b本身,共有b-a+1种
    (2)串长为2:
    第1位选[a,b)那么第2位可以选25种,第1位选b那么第2位只能选[a,c),再加上bc本身 ,共有(b-a)*25+(c-a)+1种,。
    (3)串长为3:
    原理同上,共有:(b-a)*25^2+(c-a)*25+(d-a)+1种
    (4)串长为4;
    原理同上,但注意当串长相同时,要减去本身这一种情况,
    所以,共有:(b-a)*25^3+(c-a)*25^2+(d-a)*25+(e-a)种。
    综上所述,只需要对串长分类处理,此题易于解决:

    #include<iostream>
    #include<string>
    using namespace std;
    const int c0=1;
    const int c1=1+25;
    const int c2=1+25+25*25;
    const int c3=1+25+25*25+25*25*25;
    int main()
    {
        string s;
        cin>>s;
        int n=s.length();
        int index=0;
        switch(n)
        {
        case 1:
            index=(s[0]-'a')*c3;
            break;
        case 2:
            index=(s[0]-'a')*c3+(s[1]-'a')*c2+1;
            break;
        case 3:
            index=(s[0]-'a')*c3+(s[1]-'a')*c2+(s[2]-'a')*c1+2;
            break;
        case 4:
            index=(s[0]-'a')*c3+(s[1]-'a')*c2+(s[2]-'a')*c1+(s[3]-'a')+3;
            break;
        default:
            break;
        }
        cout<<index<<endl;
    
    }
  • 相关阅读:
    记住一些英语谚语、格言或名人名言
    *英语词汇经济危机
    Windows XP Home Edition 中文版 安装IIS
    *英语词汇低碳
    14个优化网站性能提高网站访问速度技巧
    日全食 欧盟一体化 词汇
    英语词汇索马里海盗事件
    Ant实用脚本
    nginx配置数据结构及合并过程
    关于网页皮肤切换
  • 原文地址:https://www.cnblogs.com/yfz1552800131/p/7498540.html
Copyright © 2011-2022 走看看