靠谱的车【华为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.hqwc.cn/news/502178.html

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

相关文章

Python中操作MySQL和SQL Server数据库的基础与实战【第97篇—MySQL数据库】

Python中操作MySQL和SQL Server数据库的基础与实战 在Python中&#xff0c;我们经常需要与各种数据库进行交互&#xff0c;其中MySQL和SQL Server是两个常见的选择。本文将介绍如何使用pymysql和pymssql库进行基本的数据库操作&#xff0c;并通过实际代码示例来展示这些操作。…

基于Beego 1.12.3的简单website实现

参考 用Beego开发web应用 https://www.cnblogs.com/zhangweizhong/p/10919672.htmlBeego官网 Homepage - beego: simple & powerful Go app frameworkbuild-web-application-with-golang https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/pr…

今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…

高级语言期末2010级B卷(软件学院)

1.编写程序根据如下公式计算X的值&#xff08;精确到1e-5&#xff09;。 #include <stdio.h>int main(){int i1;double flag1.0/(2*i-1)*2.0*i/(2*i-1);double sum0;while(flag>1e-5){sumflag;i;flag1.0/(2*i-1)*2.0*i/(2*i-1);}printf("%lf",sum);return 0…

计算机网络_2.2物理层下面的传输媒体

2.2物理层下面的传输媒体 一、传输媒体的分类二、导向型传输媒体1、同轴电缆2、双绞线3、光纤&#xff08;1&#xff09;光纤通信原理&#xff08;2&#xff09;光纤组成&#xff08;4&#xff09;多模光纤与单模光纤对比&#xff08;5&#xff09;光纤的波长与规格&#xff08…

mysql,for循环执行sql

遇到一个问题&#xff0c;我需要模拟上百万数据来优化sql&#xff0c;线上数据down不下来&#xff0c;测试库又没有&#xff0c;写代码执行要么慢要么就是sql语句太长。 于是&#xff0c;直接用mysql自带的功能去实现&#xff01; 简单而简单 mysql可以for循环&#xff1f;没…

物体检测-系列教程19:YOLOV5 源码解析9 (Focus模块、Model类构造函数)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 13、Focus模块 13.1 基本流程 原始输入图像的格式为&#xff1a;tensor: float32[1,3,64…

map和set例题应用

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 第一题 第二题 第三题 第一题 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍历旧链表&#xff0c;并创建新节点&#xff0c;同时用map将旧节点与新节点…

存储过程基本了解

文章目录 介绍存储过程示例1. 目的2. 输入参数3. 输出参数4. 执行逻辑5. 返回值6. 示例用法7. 注意事项 存储过程的关键字有哪些简单实操 介绍 存储过程是一组预编译的SQL语句&#xff0c;以及流程控制语句&#xff0c;封装在数据库服务器中并可以被重复调用。它们可以接收参数…

Mac 重新安装系统

Mac 重新安装系统 使用可引导安装器重新安装&#xff08;可用于安装非最新的 Mac OS&#xff0c;系统降级&#xff0c;需要清除所有数据&#xff09; 插入制作好的可引导安装器&#xff08;U盘或者移动固态硬盘&#xff09;&#xff0c;如何制作可引导安装器将 Mac 关机将 Ma…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

TDengine 研发分享:利用 Windbg 解决内存泄漏问题的实践和经验

内存泄漏是一种常见的问题&#xff0c;它会导致程序的内存占用逐渐增加&#xff0c;最终导致系统资源耗尽或程序崩溃。AddressSanitizer (ASan) 和 Valgrind 是很好的内存检测工具&#xff0c;TDengine 的 CI 过程就使用了 ASan 。不过这次内存泄漏问题发生在 Windows 下&#…