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;

}
时间: 2024-10-14 05:43:45

TX2017秋招笔试题之编码的相关文章

TX2017秋招笔试题之geohash编码

问题描述:geohash编码:geohash常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二步是base32转码. 此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6). 注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间.算法举例如下: 针对纬度为80进行二进制编码过程: 1) 区间[-90, 90]进行二分为[-90, 0),[0, 90],成为左右区间,可以确定80为右区间,标

2017腾讯秋招笔试题之编码

Description: 假定一种编码的编码范围是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 Input: 输入一个待编码的字

TX2017秋招笔试题之素数对

问题描述: 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果.输入值小于1000. 如,输入为10, 程序应该输出结果为2.(共有两对质数的和为10,分别为(5,5),(3,7)) 输入描述: 输入包括一个整数n,(3 ≤ n < 1000) 输出描述: 输出对数 示例1 输入 10 输出 2 ------------------------------------------------ 解决思路; 首先判断素数(在大于1的自然数中,除了1和它本身以外不再有其他因数

网易2017秋招笔试题3:最长公共子括号序列长度

[问题来源]网传的2017网易秋招笔试题 [问题描述] [算法思路] 下面的解题思路摘自  http://www.cnblogs.com/Atanisi/p/7500186.html 刚看到题我就想到暴力解,深搜出所有合法的括号序列,再依次比较公共子序列的长度,返回最长的.但是深搜一般和路径有关,这道题仅仅需要最大公共子序列的长度.而我们发现最大公共子序列的长度就是 s.size() - 1(当且仅当修改距离为 1 时 LCS 最大), 那么我们就想到,可以变换 s 中一个括号的位置,枚举所有的

美团2017秋招笔试题 拼凑钱币

给你六种面额 1.5.10.20.50.100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数. 输入描述: 输入包括一个整数n(1 ≤ n ≤ 10000) 输出描述: 输出一个整数,表示不同的组合方案数 设f[i][j]为使用a[0]-a[i]的面额凑到j元的不同组合个数 #include <iostream> #include <cstring> using namespace std; int a[6] = {1,5

滴滴秋招笔试题(2016-09-18)

1.地下迷宫 这道题是网上找到别人的答案,拿过来学习学习,望勿怪. import java.io.BufferedInputStream; import java.util.Scanner; public class 地下迷宫 { public static int[][] dir = { { 1, 0, 0 }, { 0, 1, 1 }, { -1, 0, 3 }, { 0, -1, 1 } }; public static int n = 0; public static int m = 0

序列和-------一道大厂秋招笔试题

题目: 给出一个正整数N和长度L,找出一段长度大于等于L的连续非负整数,他们的和恰好为N.答案可能有多个,我我们需要找出长度最小的那个. 例如 N = 18 L = 2: 5 + 6 + 7 = 18 3 + 4 + 5 + 6 = 18 都是满足要求的,但是我们输出更短的 5 6 7 综合网上给出的参考答案,有两种相对简单,用python语言重写一下. 方法一:从数列的角度出发 解题思路:等差数列求和. 该题可理解为“一段长度大于等于L的等差数列之和等于N”的过程. S =L(a1+an) /

2018秋招面试题

https://blog.csdn.net/bntX2jSQfEHy7/article/details/81187626 各大企业面试题: https://blog.csdn.net/huangshulang1234/article/details/79102943 一.阿里巴巴面试 第一个:阿里面试都问什么? :(55分钟) 01 1.开发中Java用了比较多的数据结构有哪些?2.谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?这些数据结构中是线程安全的吗?

2017华为优招笔试题

  哎,没有接到笔试通知,不知道为啥就错过了. 之后见到题目,前两道编程题.其实都见过类似的题目,有点思路,但是直接快速完整实现出来,水平还是达不到. 这样的题目,也不算难,三道编程题至少AC两道才算可以.但是自己还是写代码写的少,需要多练习,增加熟练度. 第一道题,统计一个字符串中,出现的字母字符串,数字字符串和其他字符组成的字符串的个数. 思想非常简单直观,但对于边界条件以及何时将统计的数量进行增加要仔细考虑. 代码如下: #include <iostream> #include <