出租车计费 、靠谱的车

简介: 出租车计费 、靠谱的车

题目描述:出租车计费 、靠谱的车

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


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


比如:


23再多一块钱就变为25;

39再多一块钱变为50;

399再多一块钱变为500;

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


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

输入描述

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

(1<=N<=888888888)。

输出描述

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

用例

输入 5

输出 4

说明 5表示计费表的表面读数。4表示实际产生的费用其实只有4块钱。

输入 17

输出 15

说明 17表示计费表的表面读数。15表示实际产生的费用其实只有15块钱。

输入 100

输出 81

说明 100表示计费表的表面读数。81表示实际产生的费用其实只有81块钱。

解题思路

计费表从1开始计数,直到3,然后跳过4,继续从5计数。这意味着计费表上的每一位数字实际上只有9种可能的值:0, 1, 2, 3, 5, 6, 7, 8, 9(跳过了4)。因此,这个计费表实际上是在使用一个基数为9的数制系统。


输入:5

输出:4


输入:17

输出:15


输入:100

输出:81


输入:27

输出:24


输入:58

输出:43

通过将表面读数视为9进制数,并将其转换为10进制数,同时考虑到跳过的4,我们可以得到实际产生的费用。

代码

// 出租车计费/靠谱的车
#include <stdio.h>
#include <string.h>

int main() {
    char line[10];
    scanf("%s", line); // 读取输入的表面读数

    int correct = 0;           // 初始化实际产生的费用
    int length = strlen(line); // 获取输入字符串的长度

    // 遍历读数的每一位数字
    for (int i = 0; i < length; i++) {
        int digit = line[i] - '0'; // 将字符转换为数字

        // 如果数字大于4,则需要减1,因为跳过了数字4
        if (digit > 4) {
            digit--;
        }

        correct = correct * 9 + digit; // 更新实际产生的费用
        // 初始一定是0*9+最高位数字,接着最高位数字乘9+次高位(处理之后的次高位)
    }

    // 输出实际产生的费用
    printf("%d\n", correct);

    return 0;
}
相关文章
|
5月前
|
传感器 人工智能 自动驾驶
无人驾驶出租车对网约车的影响是什么呢?
无人驾驶出租车对网约车的影响是什么呢?
|
算法 C语言 C++
【数论】蚂蚁感冒、饮料换购、买不到的数目
长 100 厘米的细长直杆子上有 n只蚂蚁。
87 0
|
机器学习/深度学习 人工智能 大数据
|
自动驾驶
Waymo无人出租车年底发射,现已进入定价环节 | 公交部门竟成友军?
按照Waymo的计划,今年年底之前,他们的无人出租车服务就要进入市场了。现在,无人的士已进入了定价环节,紧张刺激。
1104 0