算法题(六十一):腾讯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.
输入描述:
输入一个待编码的字符串,字符串长度小于等于100.
输出描述:
输出这个编码的index
示例1
输入
baca
输出
16331
分析
直接上牛客网的思路吧,很清晰。要注意的是只有a开头的数完了,才去数b开头的,也就是一个进制了。所以这个题可以看作为一个进制的问题。
首先可以分成25个大块,每块是以字母a-y开头(不是x是叉,代表空,不满四个字符)
第一大块包含多少个呢?如果长度是4,说明都不包含空(x)第一位已经确定,就是a还有三位可选(选25个字母之一),就是25*25*25,长度是3说明有一个空,25*25,长度为2,两个空只剩一个位置可以是25个字母中任意一个,25,长度是1,那就只有a自己了。所以一共是 25^3+25^2+25+1
--------
例:bcd
第一位是b所以处在第二大块,result += 1 * (25^3+25^2+25+1)
第二位是c, result += 2 *(25^2+25+1)+1
第三位是d, result += 3* (25+1)+1 (加一是因为最前面有个空)
第四位是空,不管,因为空就是第一个
result = 17658
--------
例:defc
第一位是d所以处在第四大块,result += 3 * (25^3+25^2+25+1)
第二位是e, result += 4 *(25^2+25+1)+1
第三位是 f, result += 5* (25+1)+1
第四位是c, result += 2* (1)+1
result = 51567
代码
#include <stdio.h>
#include <string.h>
#define N1 1
#define N2 25
#define N3 (25 * 25)
#define N4 (25 * 25 * 25)
#define C1 N1
#define C2 (N1 + N2)
#define C3 (N1 + N2 + N3)
#define C4 (N1 + N2 + N3 + N4)
int main()
{
char code[5] = {0};
scanf("%s", code);
int index = 0;
switch(strlen(code)){
case 4: index += C1 * (code[3] - 'a') + 1;
case 3: index += C2 * (code[2] - 'a') + 1;
case 2: index += C3 * (code[1] - 'a') + 1;
case 1: index += C4 * (code[0] - 'a');
default: break;
}
printf("%d\n", index);
return 0;
}
- 一个实现批量抓取淘女郎写真图片的爬虫
- 计算机程序的思维逻辑 (8) - char的真正含义
- 搭建Docker私有仓库--自签名方式
- 详解JavaScript闭包
- Python多进程抓取全国邮政编码和长途区号
- [个人翻译]Redis 集群教程(下)
- [个人翻译]Redis 集群教程(中)
- 自学Apache Spark博客(节选)
- scrapy爬取免费代理IP存储到数据库构建自有IP池
- 每天一个Linux命令:netstat
- Hadoop - MapReduce
- 进击的爬虫:用Python搭建匿名代理池
- 计算机程序的思维逻辑 (5) - 小数计算为什么会出错?
- QQ空间爬虫最新分享,一天 400 万条数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android实现EventBus登录界面与传值(粘性事件)
- Android自定义LinearLayout布局显示不完整的解决方法
- android短信管理器SmsManager实例详解
- Android开发判断一个app应用是否在运行的方法详解
- 收割腾讯等十几个Offer后,揭秘进大厂的秘诀和Android技术面试题汇总!
- Flutter BLoC 异步通信、BlocBuilder的基本使用、BlocProvider的初探
- Android设备获取扫码枪扫描的内容与可能遇到的问题解决
- 3分钟短文:胆儿真肥!Laravel在命令行问用户要数据!
- 实战矿马:数据异常牵出的挖矿木马(.systemd-service.sh)
- leetcode之两个相同字符之间的最长子字符串
- 面试阿里被P8质问:ConcurrentHashMap真的线程安全吗?
- 腾讯云TKE-搭建prometheus监控(二)
- Qt音视频开发41-人脸识别嵌入式
- 浅析Android Studio 3.0 升级各种坑(推荐)
- Android EasyPermissions官方库高效处理权限相关教程