靠谱的车- 华为OD统一考试(C卷)
靠谱的车- 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++

题目描述
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字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块钱。
题解
此题采用记忆化搜索(实在不会可以暴力枚举所有的数字,然后去除掉数字中含有4的数字,即为答案,由于题目数据范围较大,暴力肯定会超时)。
代码大致描述:
- 通过递归函数
solve处理计费表的每一位数字,考虑是否跳过数字4,是否有限制,是否是数字。- 使用记忆化缓存
cache避免重复计算,提高效率。- 遍历计费表的每一位,根据不同情况调用递归函数。
- 返回计算结果。
Java
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.nextLine();Solution solution = new Solution();System.out.println(solution.solve(s.toCharArray(), 0, true, false));}
}class Solution {int[] cache;public Solution() {this.cache = new int[15];Arrays.fill(this.cache, -1);}/*** * @param w 原始字符数组* @param idx 构造索引位置* @param isLimit 构造时是否有限制* @param isNum 是否是数字* @return*/public int solve(char[] w, int idx, boolean isLimit, boolean isNum) {if (idx == w.length) return isNum ? 1 : 0;// 返回记忆化缓存结果if (!isLimit && isNum && this.cache[idx] != -1) return this.cache[idx];int cnt = 0;// 高位不选择元素时,比如 1235(4位数) 只构造 3位的数字的结果数if (!isNum) cnt += solve(w, idx + 1, false, false);// w[idx] 的上限int up = isLimit ? (w[idx] - '0') : 9;// 当前 idx 位置枚举所有可能的值for (int d = isNum ? 0 : 1; d <= up; d++) {if (d != 4) cnt += solve(w, idx + 1, isLimit && d == up, true);}if (!isLimit && isNum) {this.cache[idx] = cnt;}return cnt;}
}
C++
#include <bits/stdc++.h>
using namespace std;const int N=15;
int f[N],n;
string s;int solve(int i,bool is_limit,bool is_num) {if(i==n) return is_num;if (!is_limit && is_num && f[i] != -1) return f[i];int res=0;if(!is_num) res=dp(i+1,false,false);int up=(is_limit)?s[i]-'0':9;for(int d=1-is_num; d<=up; d++) {if(4!=d) res+=dp(i+1,is_limit&&d==up,true);}if(!is_limit&&is_num) {f[i]=res;}return res;
}int main() {cin>>s;n=s.size();memset(f,-1,sizeof(f));cout<<solve(0,true,false)<<endl;return 0;
}
Python
from functools import cache@cache
def solve(i, is_limit, is_num):global s, nif i == n:return int(is_num)res = 0if not is_num:res = solve(i + 1, False, False)up = int(s[i]) if is_limit else 9for d in range(1 - int(is_num), up + 1):if d != 4:res += solve(i + 1, is_limit and d == up, True)return resif __name__ == "__main__":s = input()n = len(s)print(solve(0, True, False))
(记忆化搜索)相关练习题
| 题号 | 题目 | 难易 |
|---|---|---|
| LeetCode 600 | 600. 不含连续1的非负整数 | 困难 |
| LeetCode 473 | 473. 火柴拼正方形 | 中等 |
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏
相关文章:
靠谱的车- 华为OD统一考试(C卷)
靠谱的车- 华为OD统一考试(C卷) OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题…...
Apache Flink(十一):Flink集群部署-Standalone集群部署
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 节点划分...
vue的组件传值
Vue中组件之间的数据传递可以使用props和$emit来实现。 1.使用props传递数据:父组件可以通过子组件的props属性向子组件传递数据。 父组件中: <template><div><child-component :message"parentMessage"></child-comp…...
ue5材质预览界面ue 变黑
发现在5.2和5.1上都有这个bug 原因是开了ray tracing引起的,这个bug真是长时间存在,类似的bug还包括草地上奇怪的影子和地形上的影子等等 解决方法也很简单,就是关闭光追(不是…… 就是关闭预览,在材质界面preview sc…...
【SpringCloud篇】Eureka服务的基本配置和操作
文章目录 🌹简述Eureka🛸搭建Eureka服务⭐操作步骤⭐服务注册⭐服务发现 🌹简述Eureka Eureka是Netflix开源的一个基于REST的服务治理框架,主要用于实现微服务架构中的服务注册与发现。它由Eureka服务器和Eureka客户端组成&#…...
模拟目录管理 - 华为OD统一考试(C卷)
OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 实现一个模拟目录管理功能的软件,输入一个命令序列,输出最后一条命令运行结果。 支持命令: 1)创建目录命令: mkdir 目录名称,如mkdir abc为在当前目录创建abc目录,如果已存在同名目录则不执行任何操作…...
卷王开启验证码后无法登陆问题解决
问题描述 使用 docker 部署,后台设置开启验证,重启服务器之后,docker重启,再次访问系统,验证码获取失败,导致无法进行验证,也就无法登陆系统。 如果不了解卷王的,可以去官网看下。…...
【知识】如何区分图论中的点分割和边分割
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 以下两个概念在现有中文博客下非常容易混淆: edge-cut(边切割) vertex-partition(点分割)vertex-cut(点切割) edge-partition(边分割) 实际上,初看中文时,真的会搞不清楚。但…...
【华为鸿蒙系统学习】- HarmonyOS4.0开发工具和环境配置问题总结|自学篇
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 官方链接 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 安装教程 (…...
第78讲:MySQL数据库Binlog日志的核心概念与应用案例
文章目录 1.Binlog二进制日志的基本概念1.1.什么是Binlog二进制1.2.Binlog日志的三种记录格式1.3.Binlog日志中Event事件的概念 2.开启MySQL的Binlog二进制日志3.查看Binlog二进制日志中的Event事件信息3.1.查看当前数据库有那些Binlog日志3.2.产生一些DDL/DML语句3.3.观察Binl…...
MinGW编译Python至pyd踩坑整理
title: MinGW编译Python至pyd踩坑整理 tags: [Python,CC] categories: [开发记录,Python] date: 2023-12-12 13:48:20 description: sidebar: [‘toc’, ‘related’,‘recent’] 注意需要魔法 用scoop自动安装配置MinGw 需要魔法,不需要手动配置mingw scoop in…...
计算机毕业设计 基于SpringBoot的乡村政务办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解
博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…...
命令行参数(C语言)
目录 什么是命令行参数 main函数的可执行参数 不传参打印 传参打印 IDE传参 cmd传参 命令行参数的应用(文件拷贝) 什么是命令行参数 概念:命令行参数指的是在运行可执行文件时提供给程序的额外输入信息。它们通常以字符串形式出现&am…...
WT2003H4-16S语音芯片:扭蛋机新潮音乐,娱乐升级无限
在扭蛋机的乐趣世界里,唯创知音的WT2003H4-16S语音芯片,作为MP3音乐解码播放IC,为扭蛋机带来了更智能、更富有趣味的音乐体验,为玩家打开了娱乐升级的无限可能。 1. 机启音乐,欢迎扭蛋之旅 扭蛋机启动时,…...
Go 语言开发工具
Go 语言开发工具 VSCode VScode 安装教程参见:https://www.kxdang.com/topic//w3cnote/vscode-tutorial.html 然后我们打开 VSCode 的扩展(CtrlShiftP): 搜索 go: 点击安装,安装完成后我们就可以使用代码…...
神经网络是如何工作的? | 京东云技术团队
作为一名程序员,我们习惯于去了解所使用工具、中间件的底层原理,本文则旨在帮助大家了解AI模型的底层机制,让大家在学习或应用各种大模型时更加得心应手,更加适合没有AI基础的小伙伴们。 一、GPT与神经网络的关系 GPT想必大家已…...
C++ Qt开发:RadioButton单选框分组组件
Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QRadioButton单选框组件以及与之交互的QButto…...
推荐开源项目-网络应用协议框架Socket.D
基于事件和语义消息流的网络应用协议 Socket.D 0 代码仓库地址1 该开源项目特点2 项目结构3 核心理念-协议帧Frame4 结束语 0 代码仓库地址 https://gitee.com/noear/socketd 1 该开源项目特点 代码风格优雅文档说明齐全测试用例非常人性化上手快,代码用例很多代…...
Redis缓存异常问题,常用解决方案总结
前言 Redis缓存异常问题分别是:1.缓存雪崩。2.缓存预热。3.缓存穿透。4.缓存降级。5.缓存击穿,以 及对应Redis缓存异常问题解决方案。 1.缓存雪崩 1.1、什么是缓存雪崩 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有…...
java开发的智能聊天机器人_超级AI_支持自动绘画功能
支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人,并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型,如文心一言、统一千问、MOSS等模型,并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…...
Candleduino:面向MAB驱动器的跨平台CAN控制库
1. Candleduino库概述:面向MAB Robotics驱动器的跨平台CAN控制解决方案Candleduino是一个专为嵌入式平台设计的Arduino兼容C库,核心目标是实现对MAB Robotics公司MD系列伺服驱动器(Motor Drive)与PDS系列电源分配系统(…...
jcmd-jvm
jcmd 命令详解 什么是 jcmd jcmd 是 JDK 7 引入的一个命令行工具,用于向正在运行的 JVM 发送诊断命令。它是一个功能强大的工具,整合了之前多个 JVM 工具(如 jstack、jinfo、jmap 等)的功能,提供了统一的接口来管理和监…...
Linux桌面/usr/share详解
/usr/share 是 Linux 桌面系统中一个极其核心的目录,遵循 FHS(文件系统层次结构标准)。它的核心定位是:存储架构无关的、只读的、应用程序之间共享的数据。简单理解:如果把系统比作一家公司,/usr/share 就是…...
好写作AI“期刊论文魔法工坊”:打造学术发表的秘密武器
在学术的浩瀚星空中,期刊论文宛如璀璨星辰,是研究者展示智慧结晶、推动学科发展的重要途径。然而,撰写一篇高质量且符合期刊要求的论文,却如同在荆棘丛中开辟道路,充满了挑战与艰辛。别担心,好写作AI宛如一…...
Edge/Chrome用户必看:3种免费工具批量清理失效书签(2023实测)
Edge/Chrome用户必备:2023年高效清理失效书签的3种解决方案 每次打开浏览器,看到密密麻麻的书签栏却找不到真正可用的链接?这可能是大多数互联网用户的日常困扰。根据2023年用户调研数据显示,平均每位浏览器用户拥有超过200个书签…...
性能测试专家养成记:工具、思维、实战全解析
在软件质量保障体系中,性能测试正从一个可选的“加分项”演变为关乎用户体验与业务存续的“必答题”。对于广大软件测试从业者而言,成长为一名性能测试专家,不仅意味着技术深度的拓展,更代表着从“验证功能”到“保障体验”乃至“…...
2026跨境电商数据采集避坑指南:实测实在Agent如何终结“数字员工”的幻觉时代
【摘要】 2026年3月,跨境电商行业正式迈入“Agent驱动”的生产力新纪元。随着阿里巴巴Accio Work、腾讯云MAGIC Agent 2.0等工具的密集发布,传统基于脚本的爬虫正被具备自主决策能力的“数字员工”取代。然而,在实际业务落地中,通…...
2026届最火的降重复率工具实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 维普平台针对AIGC技术的引入,制定了严谨的检测规范,在当前学术场景里…...
后台管理系统布局设计指南:从架构到实践的全方位解析
后台管理系统布局设计指南:从架构到实践的全方位解析 【免费下载链接】vue3-element-admin 🔥基于 Vue 3 Vite 7 TypeScript element-plus 构建的后台管理前端模板(配套后端源码),vue-element-admin 的 vue3 版本。 …...
Spring Data测试终极指南:Testcontainers集成测试与Mock数据策略详解
Spring Data测试终极指南:Testcontainers集成测试与Mock数据策略详解 【免费下载链接】spring-data-examples Spring Data Example Projects 项目地址: https://gitcode.com/gh_mirrors/sp/spring-data-examples Spring Data测试是确保数据访问层可靠性的关键…...
