| 题目 | 靠谱的车 |
| 难度 | 易 |
| 题目说明 | 程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。出租车司机解释说他不喜欢数字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 表示实际产生的费用其实只有 18 块钱。 |
题目解读:
此题从0,开始凡是碰到 4 就直接略过,如 3 之后是 5,39 之后是 50。
分析与思路:
很直接的思路,从 1 开始,逐次加 1,碰到 4 就直接跳到后面的数字,与此同时,统计当前正确的数字,例如如 3 之后的 5 相当于 4,6 相当于 5。最后,直到需要计算的数字。
以上是很直接的方法,还有更简单的方法。忽略 4,这意味着每一位只可能有 9 个数字,满 9 进 1。即 9 进制数字,输入的 0、1、2、3、5、6、7、8、9 分别对应 9 进制数字的 0、1、2、3、4、5、6、7、8。把输入的数字转成对应的 9 进制数字,然后计算 9 进制数字对应的 10 进制数字即可。
Java代码
- import java.util.Scanner;
-
- /**
- * 机器人活动区域
- * @since 2023.09.26
- * @version 0.1
- * @author Frank
- *
- */
- 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 );
- }
-
- }
JavaScript代码
- 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);
- }
(完)