牛客网-腾讯编程校招真题 编码 Java
题目描述:
假定一种编码的编码范围是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
思路:
看我的思路前先看夕一啊与may.的解答
看完之后,就理解了如何去做
不论输入的字符串是几位,第一位一定是这样求: result += str[0] * (25^3+25^2+25+1)
第二位(如果有), result += str[1] *(25^2+25+1)+1
第三位(如果有), result += str[2]* (25+1)+1
第四位(如果有), result += str[3]* (1)+1
之所以加1,假设输入的是bcde,计算第一位的时候只计算b之前的个数,忽略了b本身;计算第二位的时候之间算了[ba,bc)之间的个数,忽略了bc本身;计算第三位的时候只计算[bca,bcd)之间的个数忽略了bcd本身;计算第四位的时候只计算了[bcda~bcde)之间的个数,忽略了bcde本身.
举一个例子:假设输入的是qqq
表面上看起来只有三位,但其实qqq前面还有qaaa,qaab,…
第一位: result += ('q' - 'a')* (25*25*25+25*25+25+1)+1
第二位:result += ('q' - 'a')*(25*25+25+1)+1
第三位:result += ('q' - 'a')*(25+1)+1
最终结果是result-1
之所以减1是因为Index是从0开始的,result计算的是从a到qqq的个数,所以减1
代码:
import java.util.Scanner;
import java.math.*;
public class Main{public static void main(String[]args){Scanner scan = new Scanner(System.in);String code = scan.next();char[] str = code.toCharArray();int result = 0, i = 0;while(i < str.length){int tmp = 0;switch(4-i){//不论输入的字符是几位,第一位对应case4,第二位(如果有)对应case3,...case 4 : tmp = (int)Math.pow(25,3) + 25*25 + 25 + 1;break;case 3 : tmp = 25*25 + 25 + 1;break;case 2 : tmp = 25 + 1;break;case 1 : tmp = 1;break;default : break;}result += (str[i] - 'a') * tmp+1;//每一个加一是因为switch的计算是计算str[i]前面的所有可能,没有考虑等于时的四种情况.i++;}System.out.println(result-1);//之所以减1是因为Index是从0开始的.}
}
牛客网-腾讯编程校招真题 编码 Java相关推荐
- 「解析」牛客网-华为机考企业真题 1-20
又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...
- 「解析」牛客网-华为机考企业真题 41-60
又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...
- 「解析」牛客网-华为机考企业真题 81-108
又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...
- 「解析」牛客网-华为机考企业真题 21-40
又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...
- 牛客网计算机考研机试真题-abc
public class Main{public static void main(String[] args){int c;for(int a=1;a<=4;a++){for(int b=1; ...
- 牛客网基础C++编程-点和圆的位置关系
牛客网基础C++编程-点和圆的位置关系 描述 有圆类(Circle)和点类(Pointer),在圆类中实现一个 isPointerInCircle方法,该方法传入一个点类对象,判断点和圆的关系,并在该 ...
- 刷题系列--牛客网基础OJ编程130题(上)
目录 前言 BC1:实践出真知 BC2 我是大V BC 3 有容乃大 BC 6 小飞机 BC 7缩短二进制 BC 8十六进制转十进制 BC 9 printf的返回值 BC 10 成绩输入输出 BC 1 ...
- 牛客网>在线编程 > 剑指Offer>入口
牛客网:剑指offer 在线刷题入口 注:有事没事刷两下,活动活动脑子.
- 《牛客网 剑指Offer前20题》
<剑指Offer> 牛客网 前20道题 前言知识 面试题1:二维数组中的查找 面试题2:二维数组中的查找 面试题3:从头到尾打印链表 面试题4:重建二叉树 ***** 面试题5:两个栈实现 ...
最新文章
- Python程序设计题解【蓝桥杯官网题库】 DAY10-算法训练
- java spring redis订阅_spring中订阅redis键值过期消息通知
- Compound Interest Calculator4.0
- 虚拟机配置网络eth1
- mysql与ftp连接过慢的原因
- kibana操作elasticsearch:新增数据(自定义id)
- 基于用例的工作量估计
- win7 mysql php apache myadmin_windows下Apache+mysql+php+phpMyAdmin的安装及配置 | 学步园
- 可选版本 安装软件_【Linux软件】在Deepin系统下安装LibreOffice 6.1.4版本的方法
- 如何自学python知乎-怎么用最短时间高效的学习Python!知乎大佬给出了这样的答案!...
- 基于springboot的失物招领系统
- MySQL-第十四篇事务管理
- 波动方程有限差分法matlab,一维波动方程的有限差分法详解.doc
- php 判断客户端类型,怎么使用php判断客户端的类型
- 部署程序出现Failed to instantiate com.octo.captcha.service.image.DefaultManageableImageCaptchaService...
- mp4转换gif格式,免费在线转换
- Hbase Schema设计与数据模型操作
- python 中文姓名库_中文人名语料库。中文姓名,姓氏,名字,称呼,日本人名,翻译人名,英文人名。...
- idea在mac上面操作的快捷键
- 算法入门 | 二叉树的递归遍历、递归创建系列(递归)
热门文章
- 微信发布4条新规!再也不用帮好友拼团砍价了,网友纷纷称赞
- bfv同态加密_全同态加密BFV-(section 2-SHE)
- 编程实现:任意输入英文的月份,在查找月份表后输出其对应的中文提示。缩写也可查找。
- [实用电脑技术]Google Chrome谷歌浏览器下载完整离线安装版本
- long到int、int到long的强制类型转换的汇编代码
- 【keras学习(三)】mnist手写图片分类程序(一)
- Spring Boot 启动 出现异常The bean xxx could not be injected as a xx.xxxx because it is a JDK dynami
- 卸载微软拼音输入法图解
- Android开发 mobi格式,Android MobIM的免费使用方法
- 等保2.0参与医院网络安全管理的重要性