靠谱的车 - 华为OD机试题

2024-07-15 09:28:17 浏览数 (2)

题目描述

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。

出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。

比如:

  • 23再多一块钱就变为25;
  • 39再多一块钱变为50;
  • 399再多一块钱变为500;

小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。

给出计费表的表面读数,返回实际产生的费用。

输入描述

只有一行,数字N,表示里程表的读数。

(1<=N<=888888888)。

输出描述

一个数字,表示实际产生的费用。以回车结束

示例一

代码语言:javascript复制
输入
5
输出
4
说明
5表示计费表的表面读数。
4表示实际产生的费用其实只有4块钱。

示例二

代码语言:javascript复制
输入
17
输出
15
说明
17表示计费表的表面读数。
15表示实际产生的费用其实只有15块钱。

示例三

代码语言:javascript复制
输入
100
输出
81
说明
100表示计费表的表面读数。
81表示实际产生的费用其实只有81块钱。

java题解

题解

代码语言:javascript复制
此题采用记忆化搜索(实在不会可以暴力枚举所有的数字,然后去除掉数字中含有4的数字,即为答案,由于题目数据范围较大,暴力肯定会超时)。

代码大致描述:

通过递归函数 solve 处理计费表的每一位数字,考虑是否跳过数字4,是否有限制,是否是数字。
使用记忆化缓存 cache 避免重复计算,提高效率。
遍历计费表的每一位,根据不同情况调用递归函数。
返回计算结果。

0 人点赞