靠谱的车【华为OD机试-JAVAPythonC++JS】

题目描述

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字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表示实际产生的费用其实只有81块钱。

解题思路

  1. 将表面读数转换为字符串,以便按位处理数字。
  2. 遍历每一位数字,从高位到低位。
  3. 对于每一位数字,如果是4,则直接跳过;如果大于4,则减一。
  4. 计算当前位数对应的实际费用,乘以权重(9的幂次方,从高位到低位递减),并累加到总费用中。
  5. 返回实际产生的费用。

这样,通过遍历每一位数字,对数字进行适当的处理,就可以得到实际产生的费用。

题解代码

Python题解代码

def calculate_actual_cost(surface_reading):actual_cost = 0surface_reading_str = str(surface_reading)for i in range(len(surface_reading_str)):digit = int(surface_reading_str[i])if digit == 4:# 跳过数字 4continueelif digit > 4:# 对大于 4 的数字减一digit -= 1# 计算当前位数对应的实际费用,并累加到总费用中actual_cost += digit * (9 ** (len(surface_reading_str) - i - 1))return actual_cost# 输入获取
surface_reading = int(input())# 计算实际产生的费用并输出结果
print(calculate_actual_cost(surface_reading))

JAVA题解代码

import java.util.Scanner;
public class ReliableCar {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String line = sc.nextLine();processReliableCar( line );}}private static void processReliableCar( String line ) {StringBuffer sb = new StringBuffer();for( int i = 0; i < line.length(); i ++ ){char curChar = line.charAt( i );if( curChar > '4' ){sb.append( (char) ( curChar - 1 ) );}else{sb.append( curChar );}}String realValueStr = sb.toString();int realValue = 0;for( int i = 0; i < realValueStr.length(); i ++ ){realValue *= 9;realValue += ( realValueStr.charAt(i) - '0') ;}System.out.println( realValue );		}}

C/C++题解代码

#include<iostream>
using namespace std;int result(int val) {int m = val;int tmp = 0, j = 0, i = 1;while (val > 0) {if (val % 10 > 4) {tmp += ((val % 10) - 1) * j + i;}else {tmp += (val % 10) * j;}val /= 10;j = j * 9 + i;i *= 10;}return m - tmp;
}int main() {int val;cin >> val;cout << result(val) << endl;return 0;
}

JS题解代码


const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function() {while (line = await readline()) {processRobotMoveArea(line);}}();function processRobotMoveArea(line) {var realValueStr = "";for( var i = 0; i < line.length; i ++ ){var curChar = line[i];if( curChar > '4' ){realValueStr += curChar - 1;}else{realValueStr += curChar;}}var realValue = 0;for( var i = 0; i < realValueStr.length; i ++ ){realValue *= 9;realValue += ( realValueStr[i] - '0') ;}console.log(realValue);
}

代码OJ评判结果

通过测试点

代码讲解

Python题解代码解析:

  1. 函数定义:

    • calculate_actual_cost(surface_reading): 定义了一个计算实际费用的函数,接收表面读数 surface_reading 作为参数。
  2. 变量初始化:

    • actual_cost = 0: 初始化实际费用为0。
    • surface_reading_str = str(surface_reading): 将表面读数转换为字符串,以便按位处理数字。
  3. 循环遍历每一位数字:

    • for i in range(len(surface_reading_str)): 遍历表面读数的每一位数字,从高位到低位。
    • digit = int(surface_reading_str[i]): 获取当前位的数字。
  4. 处理数字4的情况:

    • if digit == 4: continue: 如果当前位数字是4,则直接跳过。
  5. 处理大于4的数字:

    • elif digit > 4: digit -= 1: 如果当前位数字大于4,则减一。
  6. 计算实际费用:

    • actual_cost += digit * (9 ** (len(surface_reading_str) - i - 1)): 计算当前位数对应的实际费用,并累加到总费用中。
  7. 返回结果:

    • return actual_cost: 返回实际产生的费用。
  8. 输入获取和结果输出:

    • surface_reading = int(input()): 获取输入的表面读数。
    • print(calculate_actual_cost(surface_reading)): 计算实际产生的费用并输出结果。

JAVA题解代码解析:

  1. 导入包和主函数:

    • import java.util.Scanner;: 导入Scanner类。
    • public class ReliableCar {: 定义类名为ReliableCar。
  2. 主函数处理输入:

    • Scanner sc = new Scanner(System.in);: 创建Scanner对象用于接收输入。
    • while (sc.hasNext()) {: 循环读取输入。
    • String line = sc.nextLine();: 读取一行输入。
  3. 处理每个字符:

    • for( int i = 0; i < line.length(); i ++ ): 遍历输入的每个字符。
    • char curChar = line.charAt( i );: 获取当前字符。
    • if( curChar > '4' ) { sb.append( (char) ( curChar - 1 ) ); }: 如果当前字符大于4,则将字符减一后追加到结果字符串中。
    • else { sb.append( curChar ); }: 否则直接追加当前字符。
  4. 计算实际费用:

    • String realValueStr = sb.toString();: 将结果字符串转换为字符串。
    • int realValue = 0;: 初始化实际费用为0。
    • for( int i = 0; i < realValueStr.length(); i ++ ): 遍历每个字符。
    • realValue *= 9; realValue += ( realValueStr.charAt(i) - '0') ;: 计算实际费用。
  5. 输出结果:

    • System.out.println( realValue );: 输出实际费用。

C/C++题解代码解析:

  1. 包含头文件和主函数:

    • #include<iostream>: 包含输入输出流头文件。
    • int result(int val) {: 定义计算实际费用的函数。
  2. 函数实现:

    • int tmp = 0, j = 0, i = 1;: 初始化临时变量和权重变量。
    • while (val > 0) {: 循环处理每个数字。
    • if (val % 10 > 4) { tmp += ((val % 10) - 1) * j + i; }: 如果当前数字大于4,则将数字减一后加到临时变量中。
    • else { tmp += (val % 10) * j; }: 否则直接加到临时变量中。
    • val /= 10; j = j * 9 + i; i *= 10;: 更新数字和权重。
    • return m - tmp;: 返回实际费用。
  3. 主函数:

    • int main() { int val; cin >> val; cout << result(val) << endl; return 0; }: 读取输入,调用函数计算实际费用,输出结果。

JS题解代码解析:

  1. 导入readline模块:

    • const rl = require("readline").createInterface({ input: process.stdin });: 使用readline模块创建接口。
  2. 异步循环处理输入:

    • void async function() { while (line = await readline()) { processRobotMoveArea(line); } }();: 异步循环读取输入,并调用处理函数。
  3. 处理每个字符:

    • for( var i = 0; i < line.length; i ++ ): 遍历输入的每个字符。
    • var curChar = line[i];: 获取当前字符。
    • if( curChar > '4' ) { realValueStr += curChar - 1; }: 如果当前字符大于4,则将字符减一后追加到结果字符串中。
    • else { realValueStr += curChar; }: 否则直接追加当前字符。
  4. 计算实际费用:

    • var realValue = 0;: 初始化实际费用为0。
    • for( var i = 0; i < realValueStr.length; i ++ ): 遍历每个字符。
    • realValue *= 9; realValue += ( realValueStr[i] - '0') ;: 计算实际费用。
  5. 输出结果:

    • console.log(realValue);: 输出实际费用。

寄语

🚀✨ 朋友,希望你的华为OD机试就像是一场轻松的技术party!愿你的代码如同畅快的音符,跳跃在键盘上,最后弹奏出一曲高分之歌。加油,你是技术舞台上的巨星!通过机试,就像是风轻云淡,轻轻松松就把高分收入囊中。祝愿你的编程之旅一路顺风,破风前行,每一行代码都是成功的注脚!🌈💻

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/712769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scaffold 脚手架

Scaffold 脚手架 Scaffold 脚手架组件是一个核心组件&#xff0c;它为开发者提供了一个标准的、可定制的应用界面框架。androidx.compose.material3.Scaffold 包含了应用界面的基础元素&#xff0c;如状态栏、导航栏、顶部应用栏&#xff08;TopAppBar&#xff09;等。通过 Sc…

Windows的Docker-Desktop安装与问题总结

目录 Docker-Desktop安装步骤 环境配置 Docker-Desktop安装问题总结 问题1&#xff1a;docker-desktop setting界面一直加载转圈 问题2&#xff1a;docker镜像的存储位置变更&#xff08;防止C盘空间不足&#xff09; 参考文献&#xff1a; Docker-Desktop安装步骤 环境…

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍&#xff1a; 居然才发现&#xff01;字节跳动旗下国产AI绘画工具Dreamina&#xff0c;这么好用居然还免费&#xff01;&#xff08;强烈推荐&#xff09; 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

【Leetcode每日一题】二分查找 - 山脉数组的峰顶索引(难度⭐⭐)(23)

1. 题目解析 Leetcode链接&#xff1a;852. 山脉数组的峰顶索引 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于找到题目中所说的峰值所在的下标并返回他们的下标即可。 2. 算法原理 峰顶及两侧数据特点分析 峰顶数据…

运算放大电路常用接法

1、反相比例运算电路 2、同相比例运算电路 3、电压跟随器 4、反相求和运算电路 5、同相求和运算电路 6、加减运算电路 7、加减电路 8、积分运算电路 9、实用积分电路 10、微分运算电路 11、实用微分电路 12、压控电压源二阶低通滤波器 13、压控电压源二阶高通滤波器 14、RC桥式…

[剪藏] - 尊湃通讯公司窃密曝光,发现绕不过华为

在科技领域风起云涌的今天&#xff0c;一场惊心动魄的窃密事件悄然发生&#xff0c;涉及华为WIFI6芯片技术的商业秘密被窃取&#xff0c;案中主谋竟然是一位曾在华为海思拥有重量级地位的技术大佬。本文将深入挖掘这起事件的来龙去脉&#xff0c;探讨窃密者的背叛和华为的技术守…

公钥密码体制

公钥密码体制 一个系统中,n个用户之间要进行保密通信,为了确保安全性,两两用户之间的密钥不能一样。这种方式下,需要系统提供C2 n=n(n-1)/2把共享密钥。这样密钥的数量就大幅增加了,随之而来的产生、存储、分配、管理密钥的成本也大幅增加。而使用公钥密码体制可以大大减…

深度学习-回顾经典AlexNet网络:山高我为峰

深度学习-回顾经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰&#x…

总结一下linux性能检测和调优手段

1.perf 是 Linux 系统中性能分析工具&#xff0c;用于收集性能相关的信息。它可以用于查看 CPU 使用情况、内存性能、磁盘 I/O 等&#xff0c;以帮助开发者找到性能瓶颈。 以下是一些 perf 常见用法和示例&#xff1a; 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

10分钟SkyWalking与SpringBoot融合并整合到Linux中

1.依赖配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.0.RELEASE</version></dependency><dependency><groupId>org.springframe…

从模型到复合AI系统的转变

2023年,大型语言模型(LLM)吸引了所有人的注意力,它可以通过提示来执行通用任务,例如翻译或编码。这自然导致人们将模型作为AI应用开发的主要成分而密切关注,所有人都在想新的LLM将带来什么能力。然而,随着越来越多的开发者开始使用LLM构建,我们认为这种关注正在迅速改变:最先进…

数据服务安全的重要性

数据服务安全在当今信息化社会显得尤为重要。随着大数据、云计算、人工智能等技术的飞速发展&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;数据服务安全也面临着前所未有的挑战。本文将从数据服务安全的重要性、常见威胁、防护策略以及未来发展趋势等方面进行探讨…

selenuim【1】($x(‘xpath语法’)、WebDriverWait())

文章目录 初学selenuim记录1、执行driver webdriver.Chrome()后很久才打开浏览器2、浏览器多元素定位 $x(‘xpath语法’)3、打开浏览器driver.get("网址")执行了很久才开始定位元素&#xff1a;等待&#xff08;1&#xff09;driver.set_page_load_timeout(t)&#…

外包干了7个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入北京某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

智慧旅游+数字化景区整体解决方案:文件全文83页,附下载

关键词&#xff1a;智慧景区建设&#xff0c;智慧旅游一体化平台&#xff0c;数字化景区建设&#xff0c;智慧旅游建设&#xff0c;智慧景区解决方案&#xff0c;智慧文旅解决方案&#xff0c;智慧旅游解决方案 一、景区智慧旅游建设需求与背景分析 1、技术发展背景 随着信息…

Unity | Shader基础知识(第十集:shader常用外部资产单词速成)

目录 一、外部资产简介 二、常用的外部资产单词 三、常用的外部资产单词和引入内部 四、图片资产外部调整的具体讲解 1.Tiling&#xff0c;中文&#xff1a;铺地砖 2.Offset&#xff0c;中文&#xff1a;偏移 五、作者的话 一、外部资产简介 在第六集中&#xff0c;我们…

RabbitMQ的常见工作模式

Work queues 工作队列模式 模式说明 通过Helloworld工程我们已经能够构建一个简单的消息队列的基本项目&#xff0c;项目中存在几个角色:生产 者、消费者、队列&#xff0c;而对于我们真实的开发中 &#xff0c;对于消息的消费者通过是有多个的。 比如在实现用户注册功能时&…

【OpenCV】绘制桌面锁屏时钟

OpenCV 是一个开源的计算机视觉&#xff08;Computer Vision&#xff09;与机器学习软件库&#xff0c;提供了多种图像处理算法与接口&#xff0c;用于解决计算机视觉相关问题。OpenCV 支持多平台与多语言&#xff0c;本文主要记录如何使用 OpenCV-Python 绘制桌面锁屏时钟。 目…

一、环境配置

一、下载Ubuntu18.04版本镜像 我的电脑配置比较低(08年奥运限定版哦)&#xff0c;使用的是虚拟机VMware进行安装Ubuntu18.04版&#xff0c;跟书上使用的一样 Ubuntu 18.04镜像 别下载错了哈 二、VMware下安装Ubuntu18.04操作系统 之前写过相关的博文&#xff0c;详细配置可…

软件测试——性能测试

目录 一、性能测试简介 二、性能测试指标 三、性能测试的流程 四、Jmeter简介 五、Jmeter常见测试框架 六、Jmeter录制脚本 七、脚本增强 八、Jmeter脚本参数化 九、断言 十、关联 十一、JDBC请求 十二、分布式测试 十三、性能测试报告 一、性能测试简介…