本文主要是介绍出租车计费 、靠谱的车,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 题目描述:出租车计费 、靠谱的车
- 输入描述
- 输出描述
- 用例
- 解题思路
- 代码
题目描述:出租车计费 、靠谱的车
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字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,因为跳过了数字4if (digit > 4) {digit--;}correct = correct * 9 + digit; // 更新实际产生的费用// 初始一定是0*9+最高位数字,接着最高位数字乘9+次高位(处理之后的次高位)}// 输出实际产生的费用printf("%d\n", correct);return 0;
}
这篇关于出租车计费 、靠谱的车的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!