• 华为OD机考算法题:靠谱的车


    目录

    题目部分

    解读与分析

    代码实现


    题目部分

    题目靠谱的车
    难度
    题目说明程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
    比如:23再多一块钱就变为25;39再多一块钱变为50;399再多一块钱变为500。
    小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。给出计费表的表面读数,返回实际产生的费用。
    输入描述只有一行,数字 N,表示里程表的读数。
    1 <= N <= 888888888。
    输出描述一个数字,表示实际产生的费用。
    补充说明
    ------------------------------------------------------
    示例
    示例1
    输入5
    输出4
    说明5 表示计费表的表面读数。
    4 表示实际产生的费用其实只有 4 块钱。
    示例2
    输入17
    输出15
    说明17 表示计费表的表面读数。
    15 表示实际产生的费用其实只有 15 块钱。
    示例3
    输入100
    输出81
    说明100 表示计费表的表面读数。
    81 表示实际产生的费用其实只有 18 块钱。


    解读与分析

    题目解读

    此题从0,开始凡是碰到 4 就直接略过,如 3 之后是 5,39 之后是 50。

    分析与思路

    很直接的思路,从 1 开始,逐次加 1,碰到 4 就直接跳到后面的数字,与此同时,统计当前正确的数字,例如如 3 之后的 5 相当于 4,6 相当于 5。最后,直到需要计算的数字。

    以上是很直接的方法,还有更简单的方法。忽略 4,这意味着每一位只可能有 9 个数字,满 9 进 1。即 9 进制数字,输入的 0、1、2、3、5、6、7、8、9 分别对应 9 进制数字的 0、1、2、3、4、5、6、7、8。把输入的数字转成对应的 9 进制数字,然后计算 9 进制数字对应的 10 进制数字即可。


    代码实现

    Java代码

    1. import java.util.Scanner;
    2. /**
    3. * 机器人活动区域
    4. * @since 2023.09.26
    5. * @version 0.1
    6. * @author Frank
    7. *
    8. */
    9. public class ReliableCar {
    10. public static void main(String[] args) {
    11. Scanner sc = new Scanner(System.in);
    12. while (sc.hasNext()) {
    13. String line = sc.nextLine();
    14. processReliableCar( line );
    15. }
    16. }
    17. private static void processReliableCar( String line ) {
    18. StringBuffer sb = new StringBuffer();
    19. for( int i = 0; i < line.length(); i ++ )
    20. {
    21. char curChar = line.charAt( i );
    22. if( curChar > '4' )
    23. {
    24. sb.append( (char) ( curChar - 1 ) );
    25. }else
    26. {
    27. sb.append( curChar );
    28. }
    29. }
    30. String realValueStr = sb.toString();
    31. int realValue = 0;
    32. for( int i = 0; i < realValueStr.length(); i ++ )
    33. {
    34. realValue *= 9;
    35. realValue += ( realValueStr.charAt(i) - '0') ;
    36. }
    37. System.out.println( realValue );
    38. }
    39. }

    JavaScript代码

    1. const rl = require("readline").createInterface({ input: process.stdin });
    2. var iter = rl[Symbol.asyncIterator]();
    3. const readline = async () => (await iter.next()).value;
    4. void async function() {
    5. while (line = await readline()) {
    6. processRobotMoveArea(line);
    7. }
    8. }();
    9. function processRobotMoveArea(line) {
    10. var realValueStr = "";
    11. for( var i = 0; i < line.length; i ++ )
    12. {
    13. var curChar = line[i];
    14. if( curChar > '4' )
    15. {
    16. realValueStr += curChar - 1;
    17. }else
    18. {
    19. realValueStr += curChar;
    20. }
    21. }
    22. var realValue = 0;
    23. for( var i = 0; i < realValueStr.length; i ++ )
    24. {
    25. realValue *= 9;
    26. realValue += ( realValueStr[i] - '0') ;
    27. }
    28. console.log(realValue);
    29. }

    (完)

  • 相关阅读:
    上海交大洪亮教授:AI 真要突破工程领域,一定要做到现有人类专家做不到的工程成果
    Eslint与Prettier配合解决代码格式问题
    内存中的swap机制
    NBA体育决策和数据挖掘分析
    安装Joplin Server私有化部署(docker)
    机器学习前沿:改进自身缺陷,满足新战略
    C++——namespace &std
    数据结构之 LinkedHashMap 与 TreeMap
    光纤连接器的连接方法
    Greenplum高可用-从失效segment恢复
  • 原文地址:https://blog.csdn.net/ZiJinShi/article/details/133313650