当前位置: 首页 > news >正文

华为OD机试真题——出租车计费/靠谱的车 (2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 100分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《出租车计费/靠谱的车 》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:出租车计费/靠谱的车


知识点:进制转换(9进制映射)、字符串处理
时间限制:1秒
空间限制:256MB
语言限制:不限


题目描述

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字 4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能正常。例如:

  1. 23再多一块钱就变为25(跳过24);
  2. 39再多一块钱变为50(跳过40-49);
  3. 399再多一块钱变为500(跳过400-499)。
    小明需要根据计费表的表面读数 N,返回实际产生的费用。
输入描述

一行数字 N,表示里程表的读数(1 ≤ N ≤ 888,888,888)。

输出描述

一个数字,表示实际费用。

示例
  • 输入:5 → 输出:4(跳过4)
  • 输入:17 → 输出:15(跳过4、14)
  • 输入:100 → 输出:81(跳过4、14、24、…、94)

Java

问题分析

题目要求根据改装后的出租车计费表读数 N,计算出实际费用。计费表跳过了所有包含数字 4 的数值,例如 4、14、24、40-49 等。我们需要将 N 转换为实际费用,即排除所有含 4 的数值后的顺序位置。


解题思路

  1. 进制转换思想:将计费表读数 N 视为一个“伪九进制”数。每个数字位的有效范围是 0-8,其中原数字若大于 4 则需要减 1(因为跳过了数字 4)。
  2. 逐位处理:遍历 N 的每一位数字,按规则调整后,将整个数视为九进制转换为十进制,得到实际费用。

代码实现

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String n = scanner.nextLine().trim(); // 读取输入并去除首尾空格long result = 0; // 存储实际费用的结果// 遍历输入字符串的每一位字符for (int i = 0; i < n.length(); i++) {char c = n.charAt(i); // 当前位的字符int digit = c - '0'; // 转换为数字// 如果当前位数字大于4,则减1(跳过数字4)if (digit > 4) {digit--;}// 将调整后的数字视为九进制数,逐位转换为十进制result = result * 9 + digit;}System.out.println(result); // 输出实际费用}
}

代码解析

  1. 输入处理

    • String n = scanner.nextLine().trim():读取输入字符串并去除首尾空格。
    • 例如输入 "100",处理后得到 "100"
  2. 遍历每一位字符

    • for (int i = 0; i < n.length(); i++):循环处理每一位数字。
    • char c = n.charAt(i):取出第 i 位的字符。
    • int digit = c - '0':将字符转换为数字,例如 '5' → 5
  3. 调整数字位

    • if (digit > 4) { digit--; }:若当前位大于 4,则减 1。例如 5 → 47 → 6
  4. 九进制转十进制

    • result = result * 9 + digit:每一步将结果乘以 9(进制基数),并加上当前位的值。
    • 例如输入 "100",处理后的各位为 1, 0, 0,计算过程为:
      • 0*9 + 1 = 1
      • 1*9 + 0 = 9
      • 9*9 + 0 = 81

示例测试

  1. 输入:5

    • 调整后的数字位:4
    • 计算过程:0*9 + 4 = 4
    • 输出:4
  2. 输入:17

    • 调整后的数字位:1 → 1,7 → 6
    • 计算过程:0*9 + 1 = 11*9 + 6 = 15
    • 输出:15
  3. 输入:100

    • 调整后的数字位:1 → 1,0 → 0,0 → 0
    • 计算过程:0*9 + 1 = 11*9 + 0 = 99*9 + 0 = 81
    • 输出:81

综合分析

  1. 时间复杂度:O(n)

    • 只需遍历输入字符串一次,时间复杂度与输入长度线性相关。
  2. 空间复杂度:O(1)

    • 仅需常数空间存储中间变量。
  3. 正确性保证

    • 进制转换思想:通过将计费表读数视为九进制数,严格对应排除数字 4 后的数值顺序。
    • 边界处理:正确处理每一位数字的调整逻辑,确保所有含 4 的数值被跳过。
  4. 优势

    • 高效:线性时间复杂度,适用于最大输入(888,888,888)。
    • 简洁:代码逻辑清晰,直接映射问题模型。
  5. 适用场景

    • 适用于所有需要处理数字跳过的场景,例如类似的进制转换问题。

python

问题分析

出租车计费表跳过了所有含数字4的数值。例如,显示5时实际费用是4(跳过了4),显示17时实际是15(跳过4、14)。我们需要将显示数值转换为真实费用,相当于将数值转换到排除4的"伪九进制"体系中。


解题思路

  1. 进制转换思想:将每个数字位视为0-8范围(排除4),等效于九进制。
  2. 逐位调整:对于每一位数字,若大于4则减1(跳过4),然后整体按九进制转十进制。

代码实现

n = 

相关文章:

  • 网络安全--PHP第二天
  • 华为OD机试真题——启动多任务排序(2025B卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Qt for Android 安卓低功耗蓝牙(BLE)开发环境搭建
  • JavaWeb:SpringBoot工作原理详解
  • 【第五篇】 SpringBoot中的高级配置
  • 可编程幻彩LED灯条的设计
  • 3d世界坐标系转屏幕坐标系
  • 详解3DGS
  • JVM相关
  • 什么是智能体agent?
  • linux 新增驱动宏config.in配置
  • Python之Pandas
  • 【node.js】node.js 安装详细步骤教程【安装在D盘】
  • 计算机网络学习20250525
  • [Linux] 利用systemd实现周期性执行任务(DDNS设置案例)
  • 第五项修炼与系统思考
  • Java 虚拟机(JVM)原理与实战:打造高效稳定的运行环境
  • 【C语言】指针全局变量
  • PyTorch Image Models (timm) 技术指南
  • SRS流媒体服务器(7)源码分析之拉流篇
  • 郑州市做网站的公/网站seo内容优化
  • 网站建设项目申请/查域名备案
  • 推广qq群的网站/google play store
  • 导购网站制作/建站软件
  • 市场监督管理局举报电话/简述seo对各类网站的作用
  • 武汉万网站制作 费用/什么是百度竞价