题目描述:

假定一种编码的编码范围是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. 「解析」牛客网-华为机考企业真题 1-20

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  2. 「解析」牛客网-华为机考企业真题 41-60

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  3. 「解析」牛客网-华为机考企业真题 81-108

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  4. 「解析」牛客网-华为机考企业真题 21-40

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  5. 牛客网计算机考研机试真题-abc

    public class Main{public static void main(String[] args){int c;for(int a=1;a<=4;a++){for(int b=1; ...

  6. 牛客网基础C++编程-点和圆的位置关系

    牛客网基础C++编程-点和圆的位置关系 描述 有圆类(Circle)和点类(Pointer),在圆类中实现一个 isPointerInCircle方法,该方法传入一个点类对象,判断点和圆的关系,并在该 ...

  7. 刷题系列--牛客网基础OJ编程130题(上)

    目录 前言 BC1:实践出真知 BC2 我是大V BC 3 有容乃大 BC 6 小飞机 BC 7缩短二进制 BC 8十六进制转十进制 BC 9 printf的返回值 BC 10 成绩输入输出 BC 1 ...

  8. 牛客网>在线编程 > 剑指Offer>入口

    牛客网:剑指offer 在线刷题入口 注:有事没事刷两下,活动活动脑子.

  9. 《牛客网 剑指Offer前20题》

    <剑指Offer> 牛客网 前20道题 前言知识 面试题1:二维数组中的查找 面试题2:二维数组中的查找 面试题3:从头到尾打印链表 面试题4:重建二叉树 ***** 面试题5:两个栈实现 ...

最新文章

  1. Python程序设计题解【蓝桥杯官网题库】 DAY10-算法训练
  2. java spring redis订阅_spring中订阅redis键值过期消息通知
  3. Compound Interest Calculator4.0
  4. 虚拟机配置网络eth1
  5. mysql与ftp连接过慢的原因
  6. kibana操作elasticsearch:新增数据(自定义id)
  7. 基于用例的工作量估计
  8. win7 mysql php apache myadmin_windows下Apache+mysql+php+phpMyAdmin的安装及配置 | 学步园
  9. 可选版本 安装软件_【Linux软件】在Deepin系统下安装LibreOffice 6.1.4版本的方法
  10. 如何自学python知乎-怎么用最短时间高效的学习Python!知乎大佬给出了这样的答案!...
  11. 基于springboot的失物招领系统
  12. MySQL-第十四篇事务管理
  13. 波动方程有限差分法matlab,一维波动方程的有限差分法详解.doc
  14. php 判断客户端类型,怎么使用php判断客户端的类型
  15. 部署程序出现Failed to instantiate com.octo.captcha.service.image.DefaultManageableImageCaptchaService...
  16. mp4转换gif格式,免费在线转换
  17. Hbase Schema设计与数据模型操作
  18. python 中文姓名库_中文人名语料库。中文姓名,姓氏,名字,称呼,日本人名,翻译人名,英文人名。...
  19. idea在mac上面操作的快捷键
  20. 算法入门 | 二叉树的递归遍历、递归创建系列(递归)

热门文章

  1. 微信发布4条新规!再也不用帮好友拼团砍价了,网友纷纷称赞
  2. bfv同态加密_全同态加密BFV-(section 2-SHE)
  3. 编程实现:任意输入英文的月份,在查找月份表后输出其对应的中文提示。缩写也可查找。
  4. [实用电脑技术]Google Chrome谷歌浏览器下载完整离线安装版本
  5. long到int、int到long的强制类型转换的汇编代码
  6. 【keras学习(三)】mnist手写图片分类程序(一)
  7. Spring Boot 启动 出现异常The bean xxx could not be injected as a xx.xxxx because it is a JDK dynami
  8. 卸载微软拼音输入法图解
  9. Android开发 mobi格式,Android MobIM的免费使用方法
  10. 等保2.0参与医院网络安全管理的重要性