/**
*Author: xiaoran
*Time: 2017-09-21 17:13
*
*Problem: 编码
* 假定一种编码的编码范围是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.
* 输入:一个待编码的字符串.
*
*Algorihtm:
* 数数问题,怎么选,当然是每一个位的权重,即每一个逢几进1。
* 我们规定从右到左分别是1-4位,
* 第一位的权重是:1
* 第二位的权重是?,我们知道a-y一共是25个数,只有到了第26个数才会进位,第二位的权重是26=(25+1)
* 第三位的权重是?,何时发生进位,第二位能够容纳的个数是25*26,当在加1的时候才会发生进位,第三位的权重是25*26+1 = 651
* 同理第四位的权重是 25*651+1 = 16276.
*
* 根据权重我们计算的是xxxx - aaaa 的值, aaaa = 3 ,所有要加上3
*/
#include<iostream>
#include<vector>
using namespace std;
const int w[]={16276,651,26,1};
int getIndex(string s){
int sum = 0;
for(int i=0;i<s.size();i++){
sum += w[i]*(s[i]-'a')+1;
}
return sum - 1;
}
int main()
{
string s;
while(cin>>s){
cout<<getIndex(s)<<endl;
}
return 0;
}
腾讯2017笔试题:编码
最新推荐文章于 2022-04-29 09:00:00 发布