码迷,mamicode.com
首页 > 其他好文 > 详细

TX2017秋招笔试题之编码

时间:2017-09-09 17:17:48      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:笔试题   编码   aac   字典序   例子   字符串   一个   question   index   

问题描述:

假定一种编码的编码范围是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;

}

 

TX2017秋招笔试题之编码

标签:笔试题   编码   aac   字典序   例子   字符串   一个   question   index   

原文地址:http://www.cnblogs.com/yfz1552800131/p/7498540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!