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

news2024/9/21 4:25:25

题目描述

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字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 = 0
    surface_reading_str = str(surface_reading)

    for i in range(len(surface_reading_str)):
        digit = int(surface_reading_str[i])

        if digit == 4:
            # 跳过数字 4
            continue
        elif 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.coloradmin.cn/o/1481462.html

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

相关文章

小工具——抖音短视频评论自动同步

很多时候喜欢看抖音的评论&#xff0c;有时候评论也是一个查疑解惑的好地方&#xff0c;很多人也喜欢把抖音的评论集中起来做分析。 因为一个朋友问过我这回事&#xff0c;闲着的时候也研究了下抖音&#xff0c;所以自己做了个小工具&#xff0c;自动同步你观看的抖音短视频的…

rust枚举类和可以为None值的枚举对象

枚举类在 Rust 中并不像其他编程语言中的概念那样简单&#xff0c;但依然可以十分简单的使用&#xff1a; #[derive(Debug)]enum Book {Papery, Electronic }fn main() {let book Book::Papery;println!("{:?}", book); } 运行结果&#xff1a; 书分为纸质书&am…

面经 | Java创建线程的三种方式

利用JUC包创建线程的三种方式&#xff1a; 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…

【rust】12、编译为 linux x86 目标

一、编译为 linux x86 目标 1.1 musl-cross 要实现 Linux 平台可以运行的程序&#xff0c;那么需要使用 musl 来替代 glibc&#xff0c;musl 实现了Linux libc。 musl 在 macOS 上使用 musl-cross, musl-cross 是用来专门编译到 Linux 的工具链&#xff0c; 下面进行安装&…

代码审查最佳实践与规则

当需要在现有项目中添加新代码时&#xff0c;应在主代码库&#xff08;通常是 master/main/test 分支&#xff09;的基础上创建功能分支。这样&#xff0c;个人或团队就可以对新功能或任务进行开发&#xff0c;直到完成为止&#xff0c;并将他们的提交推送到这个不受保护的分支…

Linux系统加固:限制用户对资源的使用禁止IP源路由更改主机解析地址的顺序设置umask值

Linux系统加固&#xff1a;限制用户对资源的使用&禁止IP源路由&更改主机解析地址的顺序&设置umask值 1.1 限制用户对资源的使用1.2 禁止IP源路由1.3 更改主机解析地址的顺序1.4 禁止ip路由转发1.5 设置umask值 &#x1f496;The Begin&#x1f496;点点关注&#x…

NOIP 2007 普及组初赛试题及解析

NOIP 2007 普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;…

【测试工具】Fiddler

1.Fiddler简介 Fiddler是位于客户端和服务器端的HTTP代理&#xff0c;能够记录客户端和服务器之间的所有 HTTP请求&#xff0c;是web调试的利器。既然是代理&#xff0c;也就是说&#xff1a;客户端的所有请求都要先经过Fiddler&#xff0c;然后转发到相应的服务器&#xff0c…

​LeetCode解法汇总235. 二叉搜索树的最近公共祖先

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定一个二叉搜索树, 找到该树中两个指定…

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)&#…

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作&#xff1a; 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解&#xff0c;可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

为什么网络安全缺口这么大,还是这么缺网络安全工程师?

为啥网安领域缺口多达300多万人&#xff0c;但网安工程师&#xff08;白帽黑客&#xff09;却很少&#xff0c;难道又是砖家在忽悠人&#xff1f;&#xff1f;&#xff1f; 主要原因为这三点: 首先是学校的原因&#xff0c;很多学校网络安全课程用的还都是十年前的老教材&…

NVMFS5113PLWFT1G汽车级功率MOSFET 60V 10A/64A满足AEC-Q101标准

AEC-Q101认证标准详细解读&#xff1a; AEC-Q101是一种汽车电子元件可靠性标准&#xff0c;由汽车电子委员会&#xff08;Automotive Electronics Council&#xff0c;简称AEC&#xff09;制定。该标准旨在确保在汽车环境中使用的电子元件具有足够的可靠性和耐久性。 AEC-Q10…

C#,双向链表(Doubly Linked List)归并排序(Merge Sort)算法与源代码

1 双向链表 双向链表也叫双链表&#xff0c;是链表的一种&#xff0c;它的每个数据结点中都有两个指针&#xff0c;分别指向直接后继和直接前驱。所以&#xff0c;从双向链表中的任意一个结点开始&#xff0c;都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循…

Docker:开启访问端口 || IDEA开发工具快速部署到服务器

参考文档&#xff1a;Docker开启远程安全访问-腾讯云开发者社区-腾讯云 一、Linux服务器环境 1.1、安装Linux 1.2、安装docker 二、Linux服务器配置docker开放端口 2.1、首先进入docker配置文件打开 /usr/lib/systemd/system/docker.service 或运行以下命令 vi /usr…

1950-2022年各省逐年平均降水量数据

1950-2022年各省逐年平均降水量数据 1、时间&#xff1a;1950-2022年 2、指标&#xff1a;省逐年平均降水量 3、范围&#xff1a;33省&#xff08;不含澳门&#xff09; 4、指标解释&#xff1a;逐年平均降水数据是指当年的日降水量的年平均值&#xff0c;不是累计值&#…

matlab工具包

matlab安装yalmip和cplex出错 - 知乎 (zhihu.com) Cplex的安装和使用实例-CSDN博客 一条龙教程&#xff1a;Matlab下使用yalmip(工具箱)cplex&#xff08;求解器&#xff09;_使用yalmip和cplex求解器进行建模和求解的步骤如下:-CSDN博客 啊啊啊&#xff0c;好开心&#xff…

C/C++ Zlib库调用Minzip来封装MyZip压缩类

文章目录 1、C/C Zlib库调用Minzip来封装MyZip压缩类1.1、类的功能实现1.1.1、ZIP压缩函数 Compress1.1.2、ZIP解压函数 UnCompress1.1.3、代码如下1.1.4、如何使用类 1、C/C Zlib库调用Minzip来封装MyZip压缩类 Zlib是一个开源的数据压缩库&#xff0c;提供了一种通用的数据压…

JVM调优,调整JVM参数

JDK8之后把-XX:PermSize和-XX:MaxPermGen移除了&#xff0c;取而代之的是XX:MetaspaceSize128m &#xff08;元空间默认大小&#xff09; -XX:MaxMetaspaceSize128m &#xff08;元空间最大大小&#xff09; JDK 8开始把类的元数据放到本地化的堆内存(native heap)中&#xff0…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…