0%

腾讯2017招聘第一题

编码

题目描述

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

输入描述:

输入一个待编码的字符串.

输出描述:

输出这个编码的index

示例1

输入

1
baca

输出

1
16331

解法分析

没什么好说的,只要找到前面所有比他大的字符串有多少个就好,但有一点要记住,就是不要忘记加上和自己前面都一样,只是位数比所求字符串小的字符串的个数,该个数为字符串的长度减一.

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cmath>
using namespace std;
int main() {
string input_string;
int index;
cin >> input_string;
//cout << input_string[0];
int length = input_string.size();
int temp = 0;
for(int i =0; i < length; i++)
{
temp += (input_string[i] - 'a') * ((pow(25, 4 - i) - 1) / 24);
}
cout << temp + length - 1;
return 0;
}